Mettre de la couleur sur le texte en fonction de la date dans une ListView

Bonjour à tous,

Je reviens avec ma ListView ... Hier je n'arrivais pas à paramétrer correctement l'affichage des valeur dans ma ListView mais aujourd'hui tout va bien.

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 With

Mais 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 Cel

Mais 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 With

ric

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 . Par contre si je puis me permettre de faire une légère modification à ton code car il fait un mini bug. Si je le prends tel quel, il va prendre en compte toute les dates supérieur à celle d'aujourd'hui. Je parle seulement du chiffre du jour. Il va en effet ne pas prendre en compte le n° du mois, ni de l'année.

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 With

Merci encore à toi Ric !

ric

Rechercher des sujets similaires à "mettre couleur texte fonction date listview"