Couleur du texte dans une listview

Résolu
Louloude74 Messages postés 62 Statut Membre -  
Louloude74 Messages postés 62 Statut Membre -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Je recupere le fichier et regarde la chose

    Quelle colonne voulez vous en couleur?
    1
    1. Louloude74 Messages postés 62 Statut Membre 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.
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    En attendant si possible couleur partiel texte: https://www.cjoint.com/c/KIejryANpFf
    J'ai fait petite modif pour recherche en temps reel sans bouton
    Question:
    votre recherche se fait sur toutes les colonnes, normal ou pas?
    0
  6. Louloude74 Messages postés 62 Statut Membre 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.
    0
  7. Louloude74 Messages postés 62 Statut Membre 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.
    0