Problème de comparaison de date VBA

Bonjour à tous !

Je cherche à créer une macro qui me permettrait de prendre les dates inscrites dans une colonne et de changer leur couleur.

Par exemple, si la date inscrite dans une cellule est inférieure à 3 jours alors mon texte passe en rouge, si c'est inférieur à une semaine c'est en orange.

J'ai plus ou moins réussi à faire quelque chose cependant, je me rend compte que lors de la comparaison, seul le jour est pris en compte (et pas le mois ou l'année).

Du coup je me retrouve à avoir des dates comme le 21/06/2021 en rouge (alors que la date est dans un mois, c'est juste qu'il ne prend pas en compte le mois)

Sub colorDate()

    Dim addDay As Byte, addWeek As Byte
    Dim alarmDate As String, warningDate As String

    addDay = 3 ' Par exemple 3 jours
    addWeek = 7 'Une semaine

    alarmDate = Day(Date) & "/" & Month(Date) & "/" & Year(Date)
    warningDate = Day(Date) & "/" & Month(Date) & "/" & Year(Date)

    alarmDate = DateAdd("d", addDay, alarmDate)
    warningDate = DateAdd("d", addWeek, warningDate)

    Workbooks("leFichierAvecLesDates").Activate
    Sheets("date").Select

     For Each cellule In Worksheets("date").Range("B2:B1100") 

        cellule.Font.Color = RGB(0, 0, 0) 'On réinitialise les couleurs des cellules pour ne pas garder celle des précédent lancement
        cellule.Font.Bold = False

          If cellule.Value <= warningDate Then
              cellule.Font.Color = RGB(238, 106, 8)
              cellule.Font.Bold = True
          End If

          If cellule.Value <= alarmDate Then
              cellule.Font.Color = RGB(255, 31, 0)
              cellule.Font.Bold = True
          End If
    Next cellule   

End Sub

Si quelqu'un à une idée, merci d'avance ! :p

Bonjour,

La date est numérique sous Excel. Pour faire des comparaisons correctes, il faut rester dans un format numérique.

    Dim alarmDate As Date, warningDate As Date

    addDay = 3 ' Par exemple 3 jours
    addWeek = 7 'Une semaine

    alarmDate = DateAdd("d", addDay, Date)
    warningDate = DateAdd("d", addWeek, Date)

    If CDate(cellule.Value) <= warningDate Then
        cellule.Font.Color = RGB(238, 106, 8)
        cellule.Font.Bold = True
    End If

    If CDate(cellule.Value) <= alarmDate Then
        cellule.Font.Color = RGB(255, 31, 0)
        cellule.Font.Bold = True
    End If

Salut thev !

Merci pour ta réponse.

J'avais déjà testé en utilisant CDate, cependant j'ai une incompatibilité de type (erreur d'exécution 13) (surement dû à ma variable cellule dans mon For Each)

Du coup je passe par un système de mise en forme conditionnelle basé sur des formules (c'est plus simple comme ça)

image 20

merci encore pour ta réponse !

Rechercher des sujets similaires à "probleme comparaison date vba"