Problème de condition

Bonjour, voila mon problème

J ai des dates dans la colonne W et des "oui" ou "non" dans la colonne X

je voudrais que si la colonne W a une date dépassée de la date d'aujourd hui + "non" dans la colonne X alors la MSGbox affiche "Certaines dates sont dépassées"

Même si il y a une seule ligne qui possède cette conditions

mais si ma colonne a une date dépassée de la date d'aujourd hui + "oui" dans la colonne X alors la MSGbox affiche "Les dates sont respectées"

Le problème est que ma macro affiche toujours

"Les dates sont respectées" même si une ligne remplie les conditions "Date dépassée" + "non"

Private Sub Workbook_Open()

Dim dLig As Long, Lig As Long

Dim Ind As Integer

Dim TabCol() As String

Dim Msg As String

Dim alerte As String

' Définir le tableau des colonnes à vérifier

TabCol = Split("W,X", ",")

' Avec la feuille nommée de ce classeur

With ThisWorkbook.Sheets("HSE")

' Pour chaque colonne à vérifier

For Ind = 0 To UBound(TabCol) - 1

' Dernière ligne

dLig = .Range(TabCol(Ind) & Rows.Count).End(xlUp).Row

' Pour chaque ligne

For Lig = 11 To dLig

'Si date dépassée et non fermé

If DateDiff("d", .Range(TabCol(Ind) & Lig), Date) >= 1 And Range(TabCol(Ind) & Lig) = "non" Then

alerte = "Certaines dates sont dépassées"

Else

alerte = "Les dates sont respectées"

End If

Next Lig

Next Ind

End With

MsgBox alerte, vbInformation, "ATTENTION..."

End Sub

Merci d'avance

Qu'est-ce qui déclenche la macro ? L'ouverture du classeur, un bouton ?

Quelle est la priorité si dans la colonne on trouve un "oui" et un "non" sur 2 dates dépassées ?

Merci pour ta réponse @optimix

L'ouverture du fichier déclanche la macro

Priorité a "non" si date dépassées

De rien. Un exemple avec une date dépassée en jaune avec "non" (il n'y en a qu'une) et 6 dates dépassées avec "oui" en orange.

Si tu modifies la date en jaune pour qu'elle ne soit pas dépassée, la réponse sera différente.

7essai.xlsm (20.22 Ko)

Tu peux déclencher la macro à l'ouverture du classeur si tu le souhaites. Le principal est de comprendre le fonctionnement des priorités.

Merci beaucoup, parfait je vais juste mettre "Else" à la place de :

' Priorité 2 = "oui"
'For i = 1 To nl
' If Cells(i, 23) < ceJour And Cells(i, 24) = "oui" Then
MsgBox "Les dates sont respectées"

Normalement ça devrait le faire

Attention : si tu mets un Else, tu perds la priorité sur le "non" et il va te sortir la 1ère occurrence trouvée (oui ou non). Méf ! Autrement dit il faut 2 boucles : la 1re pour être certain qu'il n'y a pas un "non" ET date antérieure et la 2e uniquement si aucune occurrence n'a été trouvée. Fais attention aux lignes ' **************

    ' Priorité 1 = "non"
    For i = 1 To nl
        If Cells(i, 23) < ceJour And Cells(i, 24) = "non" Then
            MsgBox "Certaines dates sont dépassées"
            Exit Sub ' ***********************************************
        End If
    Next i

    ' Priorité 2 = "oui"
    For i = 1 To nl
        If Cells(i, 23) < ceJour And Cells(i, 24) = "oui" Then
            MsgBox "Les dates sont respectées"
            Exit For ' ************************************************
        End If
    Next i
Rechercher des sujets similaires à "probleme condition"