Mettre de la couleur sur le texte en fonction de la date dans une ListView
Bonjour à tous,
Je reviens avec ma ListView
J'arrive a mettre à changer la couleur du texte en fonction d'une valeur d'une cellule mais je voudrais faire une chose assez particulier.
En fonction de la date inscrite dans la colonne LBO. Elle doit se mettre en rouge/gras si la date est comprise entre aujourd'hui et + 30 jours. Si je mets ce code ça marche à peu près :
With ListView1
For Lr = 1 To .ListItems.Count
If .ListItems(Lr).ListSubItems(8) < Date + 30 Then
.ListItems(Lr).ListSubItems(8).ForeColor = vbRed
.ListItems(Lr).ListSubItems(8).Bold = True
End If
If .ListItems(Lr).ListSubItems(6) = "Reporté" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbRed
If .ListItems(Lr).ListSubItems(6) = "Clos" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbGreen
If .ListItems(Lr).ListSubItems(6) = "En Cours" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbBlue
Next
End WithMais avec ce code j'ai des dates qui sont du mois de juillet 2021 qui s'affichent alors que ce devrait être seulement le mois de décembre et janvier.
J'ai tenté de faire ça :
With ListView1
For Lr = 1 To .ListItems.Count
If .ListItems(Lr).ListSubItems(8) < Date + 30 And .ListItems(Lr).ListSubItems(8) > Date Then
.ListItems(Lr).ListSubItems(8).ForeColor = vbRed
.ListItems(Lr).ListSubItems(8).Bold = True
End If
If .ListItems(Lr).ListSubItems(6) = "Reporté" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbRed
If .ListItems(Lr).ListSubItems(6) = "Clos" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbGreen
If .ListItems(Lr).ListSubItems(6) = "En Cours" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbBlue
Next
End With
Next CelMais là je n'ai rien qui s'affiche.
Merci d'avance pour l'aide !
Bonjour,
Avant > il faut vérifier si le contenu de la cellule textée est bien une date ...
With ListView1
For Lr = 1 To .ListItems.Count
If IsDate(.ListItems(Lr).ListSubItems(8)) Then
If CDate(.ListItems(Lr).ListSubItems(8)) < Date + 30 And .ListItems(Lr).ListSubItems(8) > Date Then
.ListItems(Lr).ListSubItems(8).ForeColor = vbRed
.ListItems(Lr).ListSubItems(8).Bold = True
End If
End If
If .ListItems(Lr).ListSubItems(6) = "Reporté" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbRed
If .ListItems(Lr).ListSubItems(6) = "Clos" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbGreen
If .ListItems(Lr).ListSubItems(6) = "En Cours" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbBlue
Next
End Withric
Je te remercie pour la réponse rapide et clean !
Tout marche nickel, j'y avais pas pensé à checker si le format était bien sous format date
Il faut ne pas oublier de mettre CDate à la deuxième condition pour éviter ce petit bug
With ListView1
For Lr = 1 To .ListItems.Count
If IsDate(.ListItems(Lr).ListSubItems(8)) Then
If CDate(.ListItems(Lr).ListSubItems(8)) < Date + 30 And CDate(.ListItems(Lr).ListSubItems(8)) > Date Then
.ListItems(Lr).ListSubItems(8).ForeColor = vbRed
.ListItems(Lr).ListSubItems(8).Bold = True
End If
End If
If .ListItems(Lr).ListSubItems(6) = "Reporté" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbRed
If .ListItems(Lr).ListSubItems(6) = "Clos" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbGreen
If .ListItems(Lr).ListSubItems(6) = "En Cours" Then .ListItems(Lr).ListSubItems(6).ForeColor = vbBlue
Next
End WithMerci encore à toi Ric !
ric