VB6 Ligne spécifice en Gras dans un ListView

Résolu
Signaler
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Rebonjour...

Derniere question de la journée.....

J'ai un ListView que j'aimerais mettre certain ligne en gras.
J'ai trouvé un bout de code permettant de faire cela... Mais je n'y arrive pas...
http://www.vbfrance.com/codes/CERTAINES-DONNEES-GRAS-DANS-LISTE_1989.aspx

Je ne sais pas si c'est causé par ADO...
Voici mon code....

    Do While BD2007.EOF = False
        With ListView2.ListItems.Add(, , IsN(BD2007!DOSSIER))   
            .SubItems(1) = IsN(BD2007![DATE D    'OUVERTURE])   
           .SubItems(2) = BD2007![NATURE DU TRAVAIL]
            If InStr(.SubItems(2) = IsN(BD2007![NATURE DU TRAVAIL]), "+") Then
                ListView2.ListItems.Item(2).Bold = True
             End If
            .SubItems(3) = IsN(BD2007!LOTS)                
        End With
        Dim Count As Integer
        Count = Count + 1
        BD2007.MoveNext

Merci de votre aide...

P.S. je ne suis pas encore tres habile avec les ListView....

10 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
C'est quoi ce IF
If InStr(.SubItems(2) = IsN(BD2007![NATURE DU TRAVAIL]), "+")

Tu es sur que ce ne serait pas plutot

If InStr(1,.SubItems(2), "+") Then
'si toutefois tu recherche un + dans et que c'est tat condition pour mettre en gras.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
58
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
14 janvier 2008

salut Jeff
regarde ce code et il va faire ton bonheur

Function rand(lowerbound As Long, upperbound As Long) As Long
    Randomize
    rand = CLng((upperbound) * Rnd + lowerbound)
    Debug.Print rand
End Function
Private Sub Form_Load()
    Dim itm As MSComctlLib.ListItem
    Dim subItm As MSComctlLib.ListSubItem
    Dim arNom
    
    arNom = Array("ALEX", "JEFF", "MARIE-FRANCE", "NATHALIE")
    
 
   ListView1.ColumnHeaders.Add , , "Nom", ListView1.Width / 4
   ListView1.ColumnHeaders.Add , , "Prénom", ListView1.Width / 4
   ListView1.ColumnHeaders.Add , , "Age", ListView1.Width / 4, lvwColumnCenter
   ListView1.ColumnHeaders.Add , , "Cp", ListView1.Width / 4, lvwColumnCenter
 
   ListView1.View = lvwReport
    For i = 1 To 20
        Set itm = ListView1.ListItems.Add(, , arNom(rand(0, 3)))
        itm.Bold = True
       
        Set subItm = itm.ListSubItems.Add(, , arNom(rand(0, 3)))
        subItm.ForeColor = vbGreen
        subItm.Bold = True
       
        Set subItm = itm.ListSubItems.Add(, , rand(18, 50))
        subItm.ForeColor = vbRed
        subItm.Bold = True
       
        Set subItm = itm.ListSubItems.Add(, , rand(1, 95))
        subItm.ForeColor = vbBlue
        subItm.Bold = True
    Next i
 
End Sub

la fonction rand n'est pas nessecaire pour toi

nirega
a+
Messages postés
16
Date d'inscription
vendredi 24 novembre 2000
Statut
Membre
Dernière intervention
20 juillet 2007

Oui, et à la place de :
...
If InStr(1,.SubItems(2), "+") Then
   ListView2.ListItems.Item(2).Bold = True
End If
...
Je verrais ça :
...
If InStr(1,.SubItems(2), "+") Then
   .Bold = True

End If
...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Un premier réflexe, d'abord !
J'insèrerais volontiers un msgbox (en rouge ci-dessous), juste pour voir si ma condition est présente (auquel cas ce serait bien l'instruction de mise en gras qui serait défaillante) ou si, au contraire, elle ne l'est pas (et dans ce cas, ce serait ma condition, qu'il me faudrait accuser, et pas la syntaxe de mise en gras... non ?


If InStr(.SubItems(2) = IsN(BD2007![NATURE DU TRAVAIL]), "+") Then
                msgbox "j'y suis"
                ListView2.ListItems.Item(2).Bold = True
End If
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Salut...
Peut-être que ma condition n'est pas bonne mais..... Je t'explique...

Dans mon code j'ai mis 4 colonnes... Mais je veux que si et seulement si la colonne "Nature du Travail" contient un "+" alors mais la ligne du ListBox en Gras....

Si je prend ta condition... Je n'ai qu'un Numéro de dossier qui devient en gras et ce dossier ne contient pas de "+" dans la colonne Nature du Travail. Il est à noter que j'ai 176 enregistrement qui s'affichent dans le ListView et je devrais avoir une cinquantaine de lignes en gras

Peut-être mon problème provient d'ailleurs dans la partie du code que j'ai mis dans mon premiere message.

J'attends de ton aide.. Merci d'avance
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Commence par le commencement, donc. Celà t'évitera des "peut-être que ma condition n'est pas bonne"
Mets ce msgbox, lance, et tu sauras sans ambiguité si ta condition est bonne ou non !
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Rebonjour....

Effectivement ma condition n'est pas bonne...

Je ne rentre pas dedans.....

J'ai essayé la condition de DocVB et je rentre dans la conditon... et ca marche.
Toutefois, les lignes qui contienents un "+" ne se mettent pas en Gras ????

merci d'avance...
Messages postés
16
Date d'inscription
vendredi 24 novembre 2000
Statut
Membre
Dernière intervention
20 juillet 2007

Je n'ai fait que reprendre la condition que Julien déjà avait corrigé au préalable, mon action consistait simplement à mettre en gras le bon élément (en l'occurence l'élément de la première colonne). Pour mettre la ligne entière en gras, il faut compléter ton code :
If InStr(1,.SubItems(2), "+") Then
   .Bold = True
   .SubItems(1).Bold = True
   .SubItems(2).Bold = True
   .SubItems(3).Bold = True
End If
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Daccord... j'y avais pensé... et j'étais justement entrain de faire quelque test mais... si je fais ca comme code ca me dit:
Erreur de compilation
Qualificateur incorect

Do While BD2007.EOF = False
        With ListView2.ListItems.Add(, , IsN(BD2007!DOSSIER))
            .SubItems(1) = IsN(BD2007![DATE D    'OUVERTURE])




            .SubItems(2) = BD2007![NATURE DU TRAVAIL]
            'If InStr(.SubItems(2) = IsN(BD2007![NATURE DU TRAVAIL]), "+") Then
            If InStr(1, .SubItems(2), "+") Then


                .Bold = True


               'ListView2.ListItems.Item(2).Bold = True
                .SubItems(3).Bold = True
                .SubItems(4).Bold = True
                .SubItems(5).Bold = True
                .SubItems(6).Bold = True
                .SubItems(7).Bold = True
                .SubItems(8).Bold = True
                .SubItems(9).Bold = True
                .SubItems(10).Bold = True
                .SubItems(11).Bold = True




            End If
            .SubItems(3) = IsN(BD2007!LOTS)
            .SubItems(4) = IsN(BD2007!CADASTRE)
            .SubItems(5) = IsN(BD2007!CLIENTS)
            .SubItems(6) = IsN(BD2007!TELEPHONE)
            .SubItems(7) = IsN(BD2007!adresse)
            .SubItems(8) = IsN(BD2007!MUNICIPALITE)
            .SubItems(9) = IsN(BD2007![DATE DE LIVRAISON])
            .SubItems(10) = IsN(BD2007!TERMINE)
            .SubItems(11) = IsN(BD2007!REMARQUES)


        End With
        Dim Count As Integer
        Count = Count + 1
        BD2007.MoveNext
    Loop

Merci de votre aide c'est tres aprécié
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Tu n'as peut-être pas tout bien saisi du mécanisme (en plus de la validité de ta condition, bien sur...)

Voilà un exemple.
Ici, je mets en gras et en rouge un item sur 2 de la 1ère colonne

Private Sub Form_Load()
    ListView1.View = lvwReport
    Dim Litem As ListItem
    ListView1.ColumnHeaders.Add , , "Nom", ListView1.Width / 3
    ListView1.ColumnHeaders.Add , , "prénom ID", ListView1.Width / 3, lvwColumnCenter
    ListView1.ColumnHeaders.Add , , "date de naissance", ListView1.Width / 3
    ListView1.ColumnHeaders.Add , , "", 0
    Dim itmX As ListItem
    For i = 1 To 10
       Set itmX = ListView1.ListItems.Add(, , i)
       itmX.SubItems(1) = "a" & i
       If i Mod 2 = 0 Then
          itmX.SubItems(2) = "17/02/2000"
           ListView1.ListItems.Item(i).Bold = True
           ListView1.ListItems.Item(i).ForeColor = vbRed
       Else
          itmX.SubItems(2) = "20/03/2002"
          itmX.SubItems(3) = "20020320"
       End If
    Next
End Sub