Problème de Cnditions IF

Bonjour,

Je suis novice en VBA. Mon programme doit comparer les dates inscrites dans les cellules C3:W72 à aujourd'hui - 3mois et colorer un onglet en vert si toutes les dates sont inférieures à TODAY - 3M sinon l'onglet est rouge. Il y a deux autres conditions à vérifier.

Lorsque mon programme s’exécute, je vois l'onglet se colorier en vert ou rouge mais selon les dates inscrites l'onglet reste vert malgré des dates inférieures à TODAY -3M.

Voici mon code :

Sub CouleurOnglet()

Dim DateAgile As Date
DateAgile = DateSerial(Year(Now), Month(Now) - 3, Day(Now))

For i = 7 To 72
    For j = 3 To 23
        If Cells(i, j).Value >= DateAgile And Range("B74") >= 90 And Range("B75") <= 2.85 Then
'Colorer l'onglet de la feuille Cartographie en vert'
            Sheets("Cartographie").Tab.ColorIndex = 4
            Range("B76").Value = "Yes"
        ElseIf Cells(i, j).Value < DateAgile Then
            Sheets("Cartographie").Tab.ColorIndex = 3
            Range("B76").Value = "No"
            Cells(i, j).Font.ColorIndex = 3
        ElseIf Range("B74") < 90 Or Range("B75") > 2.85 Then
'Colorer l'onglet de la feuille Cartographie en rouge'
            Sheets("Cartographie").Tab.ColorIndex = 3
            Range("B76").Value = "No"
        End If

    Next
Next

End Sub

Merci d'avance de votre aide

Bonjour Naimaxx, bonjour le forum,

Peut-être comme ça :

Sub CouleurOnglet()
Dim DateAgile As Date
Dim TEST As Boolean
DateAgile = DateSerial(Year(Now), Month(Now) - 3, Day(Now))
For i = 7 To 72
    For j = 3 To 23
        If Cells(i, j).Value >= DateAgile And Range("B74") >= 90 And Range("B75") <= 2.85 Then
            Range("B76").Value = "Yes"
        ElseIf Cells(i, j).Value < DateAgile Then
            TEST = True
            Range("B76").Value = "No"
            Cells(i, j).Font.ColorIndex = 3
        ElseIf Range("B74") < 90 Or Range("B75") > 2.85 Then
            TEST = True
            Range("B76").Value = "No"
        End If
    Next
Next
Sheets("Cartographie").Tab.ColorIndex = IIf(TEST = True, 3, 4)
End Sub

Merci de ta réponse mais ça ne marche toujours pas.

Pourtant la date inférieur à TODAY -3M se colorie bien rouge.

Je ne comprend pas cette ligne :

Sheets("Cartographie").Tab.ColorIndex = IIf(TEST = True, 3, 4)

Bonjour,

Testes déjà cette simple procédure (simple comparaison de dates), vois le résultat et adaptes :

Sub Test()

    Dim Tbl
    Dim I As Integer
    Dim J As Integer

    With Worksheets("Cartographie")

        'affecte à un tableau pour plus de rapidité
        Tbl = .Range("C3:W72")

        'mets l'onglet à vert par défaut en considérant que toutes
        'les dates sont inférieure à aujourd'hui - 90 jours
            .Tab.ColorIndex = 4

        'boucle...
        For I = 1 To UBound(Tbl, 1) '...par ligne...

            For J = 1 To UBound(Tbl, 2) '...et par colonne

                'si la date en cours est supérieure à aujourd'hui - 90 jours...
                '...colore l'onglet en rouge et fin de procédure
                If Tbl(I, J) > Date - 90 Then

                    .Tab.ColorIndex = 3
                    Exit Sub

                End If

        Next J, I

    End With

End Sub

Re,

Je ne comprend pas cette ligne :

Sheets("Cartographie").Tab.ColorIndex = IIf(TEST = True, 3, 4)

la syntaxe de ce code est SI(Condition, résultat si condition est [vrai], résultat si condition est [faux]), c'est un condensé de If...Else... End If en une seule ligne.

Pour toi ça donne la couleur de l'onglet = 3 si TEST est [vrai], 4 si TEST est [faux]... Car je ne vois pas l'intérêt de changer à chaque ligne alors que tu ne veux changer que si TOUTES les lignes vérifient une condition. C'est pour cela que si la condition n'est pas vérifiée je modifie la variable TEST à [vrai], une seule ligne permet donc de faire la différence. À la fin, je modifie la couleur de l' onglet en fonction de la variable TEST. Enfin... Si j'ai bien compris...

Bonjour, merci de vos réponses. Mais je n'arrive toujours pas à faire fonctionner le code.

@ThauThème

J'ai un peu modifié le code avec la condition de test. Mon problème maintenant est la prise en compte des cases vides.

J'ai rajouté une condition lorsque la case est vide test est faux et l'onglet et vert. Mais lorsqu'une date est inférieure à celle demandée, la date se colorie bien en rouge mais l'onglet reste vert. J'ai l'impression que la condition sur les cases vides prévaut sur le reste.

VOici le code modifié :

Sub CouleurOnglet()
Dim DateAgile As Date
Dim TEST As Boolean
DateAgile = DateSerial(Year(Now), Month(Now) - 3, Day(Now))
For I = 7 To 72
    For J = 3 To 23
        If Cells(I, J).Value >= DateAgile And (Range("B74") >= 90) And (Range("B75") <= 2.85) Then
            TEST = False
            Range("B76").Value = "Yes"
        ElseIf IsEmpty(Cells(I, J).Value) Then
            TEST = False
        ElseIf Cells(I, J).Value < DateAgile Or (Range("B74") < 90) Or (Range("B75") > 2.85) Then
            TEST = True
            Range("B76").Value = "No"
            Cells(I, J).Font.ColorIndex = 3
        End If
    Next
Next

Sheets("Cartographie").Tab.ColorIndex = IIf(TEST = True, 3, 4)
End Sub

Merci de votre aide

Rechercher des sujets similaires à "probleme cnditions"