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 SubSi quelqu'un à une idée, merci d'avance ! :p
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 IfSalut 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)
merci encore pour ta réponse !