Couleur du texte dans une listview

Résolu
Bonjour à tous,

Je bute sur ce bout de code.
J'effectue une recherche dans une feuille depuis un UseFfrom. Le texte cherché est écrit dans une TextBox. Quand la recherche correspond, la ListView s'incrémente des données de la ligne de la feuille.
J'aimerais que lors de la recherche, le texte qui correspond à la recherche change de couleur dans la ListeView.
Avec ce code, le texte change bien de couleur mais pas sur la bonne colonne.

Soit le texte en son entier change de couleur, soit seule la partie du texte du TextBox change de couleur.

Par avance merci pour votre aide.

Sub ALimenterListView1()

Dim f As Worksheet
Dim Lr As Long
Dim Ligne As Integer
Dim awb As String
Dim fa As String
Dim c As Variant
Dim cl As Integer

awb = ActiveWorkbook.Name
fa = ActiveSheet.Name

Set f = ThisWorkbook.Sheets("Feuil1")

  With Me.ListView1
    .ListItems.Clear
      Lr = Dlg(awb, fa, 1, Cells(1, 1).Value)
      If Lr = 2 Then Exit Sub
      
      Ligne = 1
      
      For Each c In Plage(awb, fa, 1)
        If InStr(1, c, Usf.TextBox1.Text, vbTextCompare) > 0 Then
          cl = c.Column
          
          .ListItems.Add , , f.Cells(c.Row, 1)
          For i = 2 To Dcl(awb, fa, 1)
            With .ListItems(Ligne)
              .ListSubItems.Add , , f.Cells(c.Row, i)
            End With
          Next i
          .ListItems(Ligne).ListSubItems(cl).ForeColor = vbGreen
          Ligne = Ligne + 1
        End If
        i = 2
      Next c
      
  End With

Set f = Nothing

End Sub


Configuration: Windows / Chrome 92.0.4515.159

7 réponses

  1. Bonjour,

    Avec ce code, le texte change bien de couleur mais pas sur la bonne colonne.
    Certes, certes, avec un fichier exemple serait plus facile.

    Votre code change bien la couleur, mais perso, je ne sais pas laquelle vous voulez.

    Pour transmettre un fichier,
    Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
    il faut passer par un site de pièce jointe tel que cjoint.com

    Allez sur ce site : https://www.cjoint.com/
    Clic sur parcourir,
    Cherche ton fichier,
    clic sur ouvrir,
    Clic sur "Créer le lien cjoint",
    Copier le lien,
    Revenir ici le coller dans une réponse...

    ou
    'mon partage termine arrete
    https://mon-partage.fr/

    ou
    www.transfernow.net 'fichier jusqu'a 4G
    1. Re,

      Je recupere le fichier et regarde la chose

      Quelle colonne voulez vous en couleur?
      1. Bonsoir,

        Désolé pour mon temps de réponse. Le temps de refaire mon fichier exemple.
        J'espère que le résultat souhaité sera plus parlant en utilisant ce fichier.
        https://www.cjoint.com/c/KIdtax73NK5

        Faites une recherche en utilisant le bouton "Afficher dans feuille" de l'UserForm.

        J'aimerais avoir le même résultat mais, dans la ListView.

        Encore merci pour tout.
    2. Bonjour,

      Désolé pour mon temps de réponse.
      Y a pas d'lezard.
      Je regarde la chose

      Par contre, je ne sais pas si dans colonne listview possible de colorier une partie de texte.
      Je vais chercher
      1. Bonjour,

        Oui c'est normal et très bonne idée la recherche au fur et mesure de la saisie.

        Le but de changer la couleur du texte trouvé est de rapidement visualiser où le texte recherché correspond.
        C'est plus pratique quand il y une dizaine, voir plus, de colonnes et des milliers de lignes.

        Encore merci.
        1. Bonjour,

          Je partage avec vous une proposition de solution à mon problème. Elle pourra, je l'espère servir à d'autres.

          https://www.cjoint.com/c/KIilS7bzIV5

          Sub AlimenterListe()
          
            Dim i As Long
            Dim cpt As Long
            
            cpt = 0
            
            With userform1.ListView1
              .ListItems.Clear
                With .ColumnHeaders
                   .Clear
                   .Add , , "Nom", 60
                   .Add , , "Prénom", 60, 2
                   .Add , , "Age", 60, 2
                End With
             .View = lvwReport
             .FullRowSelect = False
             .Gridlines = True
             
              For lg = 2 To Sheet1.Range("A65536").End(xlUp).Row
                For cl = 1 To 3
                  If InStr(1, Cells(lg, cl), userform1.TextBox1.Text, vbTextCompare) > 0 Then
                    .ListItems.Add , , Sheet1.Cells(lg, 1)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Sheet1.Cells(lg, 2)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Sheet1.Cells(lg, 3)
                    GoTo suite
                 End If
                Next cl
          suite:
              Next lg
              
              bcl = 0
              For lg = 1 To .ListItems.Count
                For cl = 1 To .ColumnHeaders.Count
                  If cl = 1 And InStr(1, .ListItems(lg).Text, userform1.TextBox1.Text, vbTextCompare) > 0 Then
                    .ListItems(lg).ForeColor = vbGreen
                    cpt = cpt + 1
                  ElseIf cl > 1 And bcl = 0 Then
                    cl = cl - 1
                    bcl = 1
                    If InStr(1, .ListItems(lg).ListSubItems(cl).Text, userform1.TextBox1.Text, vbTextCompare) > 0 Then
                      .ListItems(lg).ListSubItems(cl).ForeColor = vbGreen
                      cpt = cpt + 1
                    End If
                    cl = cl + 1
                  ElseIf cl > 1 And bcl = 1 Then
                    cl = cl - 1
                    If InStr(1, .ListItems(lg).ListSubItems(cl).Text, userform1.TextBox1.Text, vbTextCompare) > 0 Then
                      .ListItems(lg).ListSubItems(cl).ForeColor = vbGreen
                      cpt = cpt + 1
                    End If
                  cl = cl + 1
                  End If
                Next cl
              Next lg
              
            End With
            MsgBox "Nombre d'occurence trouvée : " & cpt
          End Sub
          


          Malheureusement, je n'ai pas réussi à mettre en couleur partiellement le texte trouvé dans la ListeView. Si le texte cherché est dans le texte de la cellule de ListView alors c'est le texte en son entier de la cellule qui change de couleur.

          Encore merci pour l'aide apportée.

          Bonne journée et mon continuation.