Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu]TextBox Recherche ListBox Multicolonnes

Kim75

XLDnaute Occasionnel
Bonjour le forum,

J'utilise ce code de « Liste Intuitive Form Contenu » du site de Jacques Boisgontier, une véritable mine d'or

http://boisgontierjacques.free.fr/pages_site/donneesvalidation.htm
VB:
Private Sub TextBox5_Change() 
Dim Dico As Object, c, tmp
Set Dico = CreateObject("Scripting.Dictionary")
Me.ListBox8.Clear
tmp = "*" & UCase(Me.TextBox5) & "*"
For Each c In Tbl
    If UCase(c) Like tmp Then Dico(c) = ""
Next c
Me.ListBox8.List = Dico.keys
End Sub

Ce code est prévu pour une ListBox à 1 colonne alimentée directement de la feuille Excel, et je n'arrive à l'adapter pour une ListBox à 3 colonnes, alimentée non pas de la feuille Excel directement mais par l'intermédiaire d'un Array à 3 colonnes lui aussi. Si quelqu'un pourrait me filer un coup de main ce serait sympa, j'ai essayé une autre méthode sans passer par le dictionnaire mais sans résultat, je rencontre des problèmes de compatibilité de types d'objets que je connais malheureusement peu.

Cordialement, Kim.
 

Pièces jointes

  • TextBox_Recherche_ListBox.xlsm
    259.3 KB · Affichages: 239

Kim75

XLDnaute Occasionnel
Bonsoir Jacques, le forum,

Merci beaucoup Jacques pour cette précieuse aide, je n'aurais pas trouvé tout seul
Je mets le fichier corrigé en pièce jointe pour les ExcelDownloadsistes, si ça peut servir

Cordialement, Kim.
 

Pièces jointes

  • TextBox_Recherche_ListBox_2.xlsm
    259.7 KB · Affichages: 194
Dernière édition:

Bitiligo

XLDnaute Nouveau
Bonjour à tous,

J'ai réalisé une textbox et une listview dans un UserForm. La recherche de données dans toutes les colonnes de la listview marche parfaitement mais avec qu'un seul mot-clé. Je souhaite rechercher les données en parcourant toutes les colonnes de la listview avec plusieurs mots dans un ordre quelconque afin d'affiner davantage la recherche.
(Pour des soucis de rapidité d'exploitation des données, je ne souhaite pas de bouton "Rechercher". La recherche des données s'affine au fur et à mesure de la saisie.)

De ce fait, Jacques, votre exemple concernant la recherche intuitive par plusieurs mots dans toutes les colonnes répond exactement à mon besoin (cf. fichier Excel "RechercheMultiMotsMulticolonnes"). Néanmoins, vous avez réalisé ceci à partir d'une listbox. Dans mon cas, j'ai besoin de rester en listview pour des contraintes d'affichage et de mise en forme des données.

Ci-joint mon fichier excel allégée afin de vous montrer mon codage actuel et mon UserForm.

Ma question : est-il possible d'adapter votre code pour ma LISTVIEW dans le but de rechercher des données sur les 13 colonnes avec plusieurs mots dans un ordre quelconque ?
Sinon, tout simplement, est-il possible de rechercher des données dans une listview avec plusieurs mots ?

(Cela fait maintenant 1 semaine que je butte sur ce sujet)

Cordialement, Bitiligo.
 

Pièces jointes

  • Recherche_Multimots_Multicolonnes_LISTVIEW.xlsm
    51.9 KB · Affichages: 99

BISSON Nicole

XLDnaute Nouveau
Bonsoir,

Dim f, choix(), Rng, Ncol
Private Sub UserForm_Initialize()
Set f = Sheets("bd")
Set Rng = f.Range("A3:M" & f.[A65000].End(xlUp).Row)
Tbltmp = Rng.Value
Ncol = Rng.Columns.Count
For i = LBound(Tbltmp) To UBound(Tbltmp)
ReDim Preserve choix(1 To i)
For k = LBound(Tbltmp) To UBound(Tbltmp, 2)
choix(i) = choix(i) & Tbltmp(i, k) & " * "
Next k
Next i
'---listview
With Me.ListView1
With .ColumnHeaders
.Clear
For k = 1 To Ncol
.Add , , f.Cells(2, k), f.Columns(k).Width * 0.9
Next k
End With
.Gridlines = True
.View = lvwReport
ligne = 1
For i = 1 To UBound(Tbltmp)
.ListItems.Add , , Tbltmp(i, 1)
For k = 2 To Ncol
.ListItems(ligne).ListSubItems.Add , , Tbltmp(i, k)
Next k
ligne = ligne + 1
Next i
End With
End Sub

Private Sub TextBox1_Change()
If Me.TextBox1 <> "" Then
mots = Split(Trim(Me.TextBox1), " ")
Tbl = choix
For i = LBound(mots) To UBound(mots)
Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
Next i
If UBound(Tbl) > -1 Then
Me.ListView1.ListItems.Clear
ligne = 1
For i = LBound(Tbl) To UBound(Tbl)
a = Split(Tbl(i), "*")
Me.ListView1.ListItems.Add , , a(0)
For k = 1 To Ncol - 1
Me.ListView1.ListItems(ligne).ListSubItems.Add , , a(k)
Next k
ligne = ligne + 1
Next i
Me.Label1.Caption = UBound(Tbl) + 1
End If
Else
UserForm_Initialize
End If
End Sub


BISSON
 

Pièces jointes

  • RechercheMultiMotsMulticolonnesListView2.xls
    121.5 KB · Affichages: 195
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…