Porblème boucle if

Thom -  
SpideyCodeWarrior Messages postés 10 Statut Membre -
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

  1. SpideyCodeWarrior Messages postés 10 Statut Membre
     
    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