Porblème boucle if

Fermé
Thom - Modifié le 3 mars 2022 à 10:29
SpideyCodeWarrior Messages postés 9 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 5 janvier 2024 - 4 mars 2022 à 14:23
Bonjour, j'ai un soucis sur ma macro excel,

dans mon tableau croisé dynamique, j'aimerais faire une boucle if, si le groupe de selection de la date est différent de mois trimestre année alors tu le change sauf que cela ne fonctionne pas avec mon programme.
Pouvez-vous m'aider ?
cordialement,

Macro :

Sub test()
Range("A4").Select
      'ActiveSheet.PivotTables ("Tableau croisé dynamique9")
Selection.Group Start:=True, End:=True
If Periods <> Array(False, False, False, False, True, True, True) Then
Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
        False, True, True, True)
End If

End Sub




Configuration: Windows / Edge 98.0.1108.62

1 réponse

SpideyCodeWarrior Messages postés 9 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 5 janvier 2024
4 mars 2022 à 14:23
Bonjour,

voici une macro à mettre dans XL que j'ai réalisé, intentionnellement plus longue afin de la rendre plus facilement compréhensible.
Après avoir sélectionné la plage qui contient le format de vos données, appelez la Macro suivante qui coloriera en rouge là où la cellule est ma formatée.
Donc les deux caractères de gauche doivent être compris entre 1 et 12
Ceux du trimestre entre 1 et 4
Je pars du fait que la valeur d'une cellule est au format MM/TR/YYYY
Exemple : 12/04/2022 pour 4ème trimestre, mois décembre, année 2022

Oli

Sub mcrFindBadFormat()

'1) Copier les valeurs suivantes en A1
'
' 01/03/2020 13/12/2021 06/04/2019
' 17/06/2019 04/01/2020 11/04/2020
'
'2) Copier la procédure suivante dans les macros
'
'3) Sélectionner la plage où se trouve les valeurs
' et la procédure coloriera les cellules en rouge
' là où la valeur du mois, ou du trimestre ou
' de l'année ne sont pas correctement formatés.
'
Dim cCellule As Variant
Dim s As Variant
Dim v As String
Dim sMois As String
Dim sTrim As String
Dim sAn As String
Dim bFormatOk As Boolean
Dim iMois As Integer
Dim iTrim As Integer
Dim iAnnee As Integer
Dim iAnneeCourante As Integer

iAnneeCourante = Year(Date)


Set s = Selection

For Each cCellule In s

bFormatOk = True
v = cCellule.Value
'
' Format attendu 10 caractères, MM/TR/YYYY Exemple : 12/03/2020 --> Ok
' 22/1/2019 --> NOk !
'Longueur correcte ?
If Len(v) <> 10 Then
bFormatOk = False
ElseIf Len(v) = 10 Then
'
' Format mois trimestre année Ok ?
' Mois
'
sMois = Left(v, 2)

If IsNumeric(sMois) Then
iMois = sMois
If iMois >= 1 And iMois <= 12 Then
'Les deux caractères de gauche se trouvent
'entre 1 et 12 et donc sont les valeurs
'possibles du chiffre pour le mois
bFormatOk = True
Else
bFormatOk = False
End If
Else
bFormatOk = False
End If
'
' Année
'
If bFormatOk Then
'Si le mois est correct, on vérifie l'année
sAn = Right(v, 4)
If IsNumeric(sAn) Then
iAnnee = sAn
If iAnnee >= 1900 And iAnnee <= iAnneeCourante Then
'l'année est bien supérieure à l'an 1900
' et est bien inférieur ou égal à l'année courante
bFormatOk = True
Else
bFormatOk = False
End If
Else
bFormatOk = False
End If
End If
'
' Trimestre
'
If bFormatOk = True Then
'Si le mois et l'année sont correct, on vérifie le trimestre
sTrim = Mid(v, 4, 2)
If IsNumeric(sTrim) Then
iTrim = sTrim
If iTrim >= 1 And iTrim <= 4 Then
bFormatOk = True
Else
bFormatOk = False
End If
Else
bFormatOk = False
End If
End If
End If
If bFormatOk = False Then
cCellule.Font.Color = vbRed
'
' Mettre ici le code pour bien
' formater les données
'
'...

End If

Next


End Sub



Oli
0