VB6 Ligne spécifice en Gras dans un ListView

Résolu
cs_JeffC1977 Messages postés 926 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 - 5 juin 2007 à 17:19
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 5 juin 2007 à 19:57
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

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 juin 2007 à 17:24
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
3
cs_nirega Messages postés 58 Date d'inscription dimanche 17 février 2002 Statut Membre Dernière intervention 14 janvier 2008
5 juin 2007 à 19:48
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+
3
Doc VB Messages postés 16 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 20 juillet 2007
5 juin 2007 à 17:32
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
...
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
5 juin 2007 à 17:32
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JeffC1977 Messages postés 926 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 4
5 juin 2007 à 17:36
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
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
5 juin 2007 à 17:41
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 !
0
cs_JeffC1977 Messages postés 926 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 4
5 juin 2007 à 17:46
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...
0
Doc VB Messages postés 16 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 20 juillet 2007
5 juin 2007 à 17:50
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
0
cs_JeffC1977 Messages postés 926 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 septembre 2010 4
5 juin 2007 à 18:04
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é
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
5 juin 2007 à 19:57
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
0