Problème affichage multiple dans champ listbox
Bonjour à tous,
Grâce à l'article "Comment créer un champ de recherche efficace en 3 minutes ?" j'ai pu créer mon champ recherche (textbox) et champ résultat de recherche (Listbox) presque comme souhaité
A la différence avec la solution proposée par l'article où la recherche n'est fait que sur une colonne, je fais ma recherche sur une plage de cellule (A2:L100). De plus je fais apparaître dans le champ résultat "ListBox1" que la valeur de la première cellule de la ligne.
Du coup quand je tape un texte dans le champ de recherche "TextBox1" , si le champ de recherche est à plusieurs endroit dans la même ligne, le champ résultat "listbox1" me sort la première cellule autant de fois que j'ai le mot recherché. Hors comme c'est sur la même ligne je voudrais que ca n'apparaisse qu'une fois.
Ci-dessous mon VBA:
Option Compare Text
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Range("A2:L100").Interior.ColorIndex = 2
ListBox1.Clear
If TextBox1 <> "" Then
For ligne = 2 To 100
For colonne = 1 To 12
If Cells(ligne, colonne) Like "*" & TextBox1 & "*" Then
Cells(ligne, colonne).Interior.ColorIndex = 6
ListBox1.AddItem Cells(ligne, 1)
End If
Next
Next
End If
End Sub
Je joins mon xls pour une meilleur compréhension.
Merci à tous pour votre aide sur ce sujet
Bonjour Noir et bienvenu, bonjour le forum,
Un petit Exit For devrait faire l'affaire :
Private Sub TextBox1_Change()
Application.ScreenUpdating = False 'pour fluidiser la macro
Range("A2:L100").Interior.ColorIndex = 2 'met en blanc les cellules quand pas de recherche
ListBox1.Clear 'vide la listbox si pas de recherche
If TextBox1 <> "" Then
For ligne = 2 To 100 'défini la plage de recherche pour les lignes
For colonne = 1 To 12 'défini la plage de recherche pour les colonnes
If Cells(ligne, colonne) Like "*" & TextBox1 & "*" Then 'recherche dans la plage indiqué avec les FOR et les * sont pour permettre une recherche partielle
Cells(ligne, colonne).Interior.ColorIndex = 6 'met en vert la case avec le mot recherché
ListBox1.AddItem Cells(ligne, 1) 'indique dans la listbox le numéro de MTS concerné par la recherche
Exit For '<=== ICI
End If
Next
Next
End If
End SubMerci Thauthème pour ta réponse.
Si j'ajoute le Exit For comme indiqué dans ton message la recherche ne fonctionne qu'a moitié. En effet si j'ai 2 fois le même mot dans la ligne je n'aurais qu'une cellule colorisé:
Ce que je souhaite c'est que si j'ai plusieurs fois le même mot dans la même ligne, le texte apparaissant dans la Listbox n'appariasse qu’une seule fois pour éviter de surcharger la listbox.
Re,
Alors avec deux boucles, une pour la couleur une autre pour l'ajout dans la ListBox...
Private Sub TextBox1_Change()
Application.ScreenUpdating = False 'pour fluidiser la macro
Range("A2:L100").Interior.ColorIndex = 2 'met en blanc les cellules quand pas de recherche
ListBox1.Clear 'vide la listbox si pas de recherche
If TextBox1 <> "" Then
For ligne = 2 To 100 'défini la plage de recherche pour les lignes
For colonne = 1 To 12 'défini la plage de recherche pour les colonnes
If Cells(ligne, colonne) Like "*" & TextBox1 & "*" Then 'recherche dans la plage indiqué avec les FOR et les * sont pour permettre une recherche partielle
Cells(ligne, colonne).Interior.ColorIndex = 6 'met en vert la case avec le mot recherché
End If
Next
For colonne = 1 To 12 'défini la plage de recherche pour les colonnes
If Cells(ligne, colonne) Like "*" & TextBox1 & "*" Then 'recherche dans la plage indiqué avec les FOR et les * sont pour permettre une recherche partielle
ListBox1.AddItem Cells(ligne, 1) 'indique dans la listbox le numéro de MTS concerné par la recherche
Exit For
End If
Next
Next
End If
End SubAh oui je suis un peu bête de pas y avoir pensé...
merci bien ThauThème pour ton aide sur ce sujet.