filtre textbox comme dans Itune ......

kevenpom

XLDnaute Junior
Bonjour a tous,
voilà j'ai un textbox avec une listbox quand je tape mon texte dans ma textbox il recherche dans ma feuille colonne A.

Le problème ses que j'aimerait que ma recherche se fasse a partir de n'importe ou dans la chaine de caractère..... et non pas seulement a partir de la gauche...
exemple comme dans Itune quand ont tape "park lin"
bien il nous ressort tout le "linkin park"
pour l'instant si ma chaine de caractère est "salut 1234"
je doit absolument taper dans ma textbox "sal" pour qu'il me ressorte mon "salut 1234"
alors que j'aimerai pouvoir taper "12 sa" pour qu'il me sorte ma chaine "salut 1234".

Voici mon code ....
Merci encore pour votre support.
Code:
Private Sub TextBoxRechCode_Change()
ListBox1.Clear
ListBox2.Clear
N = 0
Recherche = TextBoxRechCode.Value
Ligne = Worksheets("vente").Range("a" & "65536").End(xlUp).Row
Set Plage = Worksheets("vente").Range("a" & "1:" & "a" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
Adresse = C.Address
Do
    If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
        ListBox1.AddItem C.Offset(0, 0), N
        ListBox1.List(N, 0) = C
        ListBox1.List(N, 1) = C.Offset(0, 1)
        ListBox1.List(N, 2) = C.Offset(0, 2)
        ListBox1.List(N, 3) = C.Offset(0, 3)
        ListBox1.List(N, 4) = C.Offset(0, 4)
        N = N + 1
    End If
    Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
    End If
End With
For x = 1 To 8
 Controls("Textbox" & x) = ""
Next x
If TextBoxRechCode = "" Then ListBox1.List = t
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : filtre textbox comme dans Itune ......

Re :),
Je ne pense pas que mes fonctions puissent améliorer le délais, vu qu'il y aura toujours 8000 lignes à scanner...
Par contre, tu peux gagner du temps en étant moins gourmand :p...
Je m'explique : ta requête est lancée à chaque saisie de caractère. On pourrait ne la lancer que si il y a au moins 3 caractères (si blanc, 3 minimum de chaque). Comme cela, une fois que la recherche se fait sur 3 caractère minimum, elle ira beaucoup plus vite ;).
Code:
Dim Test
If TextBoxRechCode = "" Or Right(TextBoxRechCode, 1) = " " Then Exit Sub
If Len(TextBoxRechCode) < 3 Then Exit Sub
If InStr(1, TextBoxRechCode, " ", vbTextCompare) <> 0 Then
Test = Split(TextBoxRechCode, " ")
For I = LBound(Test) To UBound(Test)
If Len(Test(I)) < 3 Then Exit Sub
Next I
End If
Bon courage :cool:
 

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

salut, je m'incruste un peu sur ce post car je dois faire le meme genre de recherche mais dans un fichier client d'environ 3000lignes et 21 colonnes. Et les solutions que vous apportez semble correspondre a ce dont j'ai besoin (car je rame avec ma fonction recherche vba, je ne trouve rien) mais mois qui débute en vba, pourriez vous me dire où je glisse le code qui vous donnez,
je suppose que je doit insérer un nouveau USF dans VBA avec une zone de texte mais a partir de là, dois-je insérer le code dans la textebox ou dans le userform?
merci en tous cas pour les réponses et désolé de polluer ce post:rolleyes:
 

JNP

XLDnaute Barbatruc
Re : filtre textbox comme dans Itune ......

Bonjour Chacmhaal et bienvenue :)
salut, je m'incruste un peu sur ce post car je dois faire le meme genre de recherche mais dans un fichier client d'environ 3000lignes et 21 colonnes.
Tu ne polue pas le fil si ta requête est similaire, c'est d'ailleurs plus positif que d'ouvrir une nouvelle discussion où il faudrait tout reprendre à zéro ;).
Le but du code qu'on a écrit est de faire une recherche sur des parties de mots, séparées par un espace qui donc est interprété comme ET. Donc "cha all" va trouver "chacmhaal" par exemple. A voir si c'est bien cela que tu souhaites :D.
Par contre, le code a été développé pour un fichier spécifique, on peut difficilement le coller dans un autre fichier sans faire un minimum de modification. Le plus simple serait que tu mettes un petit bout de ton fichier (sans données confidentielles) et que tu expliques un minimum ton problème : où tu souhaites faire ta recherche - sous quelle forme tu veux récupérer le résultat - etc. :rolleyes:.
Au plaisir de te lire :cool:
 

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

En fait en vous lisant je me demande si c'est bien la meme chose, en effet j'ai 21 colonnes(dans l'ordre ZONE, RAISON SOCIALE, COMMUNUNE,ADRESSE, INTERLOCUTEUR, TEL, les autres colonnes ne sont pas importantes pour la recherche et dont le nom figure plusieurs fois mais dans des communes différentes: et j'aurais besoin de faire un USF de recherche avec 7 cases (zone, RS, commune, ...) dans lequelles lorque je tape soit le numero de tel soit la zone par exemple il m'affiche les resultat correspondant, et quand je clique sur la reponse souhaité soit elle s'affiche dans un uSF avec une frame (dans laquelle il y aurait les 21 informations de mes colonnes)soit cela me renvoi à la ligne corresondant si c'est plus facile a faire ou les deux idéalement.
j'éspère que ce n'est pas trop pharaonique comme demande, si c'est le cas je m'en excuse.:rolleyes:
je vous joint un extrait de ma base de donnée avec des exemples ficitifs
en tous cas un grand merci à vous
 

Pièces jointes

  • exemple_fichier_client.xlsx
    9.7 KB · Affichages: 78

JNP

XLDnaute Barbatruc
Re : filtre textbox comme dans Itune ......

Re :),
Non ce n'est pas vraiment la même chose :rolleyes:...
Je t'ai fait un exemple de départ, à toi de le continuer :p.
Par contre, la ListBox n'accepte que 10 colonnes, pas 21...
Eventuellement, mettre une deuxième ListBox à côté...
Bon courage :cool:
 

Pièces jointes

  • exemple_fichier_client(1).xlsm
    16.9 KB · Affichages: 70

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

en fait ce n'est pas tout à fait cela mais c'est déjà énorme et vraiment sympa la list box comporte pil poile les informations dont j'ai besoin par contre j'aurais besoin de pouvoir rechercher non seulement par critère de raison social mais aussi par date de visite, tel,... mais sa doit etre plus compliqué et peut-etre que cela rallongerai le temps de recherche.
Bon je vais essayer d'assigner un bouton pour déclencher l'USF et de mettre un bouton close tout seul comme un grand:).

en tous cas merci beaucoup pour cette aide
 

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

Par contre j'aurais besoin que lorsqu'on clique sur la ligne que nous cherchions et que nous avons trouvé, cela nous emmene directement à la ligne concernée dans la base de donnée (et pourquoi pas que les données apparaissent sous forme d'une fiche dans un deuxième USFmais ça je ne sais pas si c'est possible) en tous cas je ne vois pas du tout comment faire cela.
 

JNP

XLDnaute Barbatruc
Re : filtre textbox comme dans Itune ......

Re :),
@ Kevenpom : ;).
@ Chacmhaal : Le "à toi de continuer" voulait bien dire ce que ça veut dire :p...
Pour les autres TextBox, il te suffit d'adapter le code pour la colonne adéquate. Pour les dates, c'est juste un peu plus pointu, il faut rajouter un
Code:
LookIn:=xlValues
dans le Find et veiller à mettre les dates dans la même présentation que dans la feuille.
Pour aller sélectionner la ligne issue de la ListBox, le problème est que ça va t'ôter une colonne, mais tu peux stocker le N° de ligne avec C.Row, et faire appel à Selected pour connaître la ligne sélectionnée. Sinon, il va falloir utiliser un Find et un FindNext jusqu'à ce que toutes tes données correspondent, mais ça va être lourd :D...
Bon courage :cool:
 

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

Aie cela se complique, je laisse tomber les autres colonnes, la raison sociale me suffit par contre il faut que je comprenne pour selectionner la ligne en question...
par contre est-ce que quelqu'un sait si il est possible qu'un bouton reste figé sur l'écran sans suivre les reste de la feuille pendant qu'la scroll pour que le bouton soit accessible à n'importe quel endroit de la feuille (je ne pux pas le mettre dans un menu personnalisé car ce dernier doit etre accessible sur tous les PC de l'entreprise...;)
 

chacmhaal

XLDnaute Nouveau
Re : filtre textbox comme dans Itune ......

bon en fait j'ai tout testé userform est nickel mais par contre je n'arrive vraiment pas à faire en sorte que la ligne soit séléctionnable, j'avais un exemple trouvé sur le forum mais je n'arrive pas à l'adapter à mon cas...:(

je remet mon cas et l'exemple que j'avais trouvé et que je n'arrive pas à adapter en PJ
merci de votre en tous cas
 
Dernière édition:

kevenpom

XLDnaute Junior
Re : filtre textbox comme dans Itune ......

y jai réussi a adapter mes colonne mais voila mon problème quand jai rajouter
ton bout de code dans le mien
est t'il possible que quand j'efface mon texte dans TextBoxRechCode
que mes 2 listbox ne se rénisialise pas pour afficher toute les possibilités....

ou meme si j'efface un caractère de ma textebox mes 2 listebox ne se rénisialise pas pour afficher les possibilités....il reste comme il était ...

Code:
[CODE]If TextBoxRechCode = "" Or Right(TextBoxRechCode, 1) = " " Then Exit Sub
If Len(TextBoxRechCode) < 3 Then Exit Sub
If InStr(1, TextBoxRechCode, " ", vbTextCompare) <> 0 Then
Test = Split(TextBoxRechCode, " ")
For I = LBound(Test) To UBound(Test)
If Len(Test(I)) < 3 Then Exit Sub
Next I
End If
ListBox1.Clear
ListBox2.Clear
N = 0
N2 = 0
Recherche = Split(TextBoxRechCode.Value, " ")
If InStr(1, TextBoxRechCode, " ", vbTextCompare) <> 0 Then Multi = True Else Multi = False
ligne = Worksheets("vente").Range("a" & "65536").End(xlUp).Row
Set Plage = Worksheets("vente").Range("a" & "1 : " & "a" & ligne)
Ligne2 = Worksheets("achat").Range("a" & "65536").End(xlUp).Row
Set Plage2 = Worksheets("achat").Range("a" & "1 : " & "a" & Ligne2)

With Plage
If Multi Then Set C = .Find(Recherche(0), LookAt:=xlPart) Else Set C = .Find(Recherche, LookAt:=xlPart)
If Not C Is Nothing Then
Adresse = C.Address
Do
Flag = True
If Multi Then
For J = 1 To UBound(Recherche)
If InStr(1, C, Recherche(J), vbTextCompare) = 0 Then
Flag = False
Exit For
End If
Next J
End If
If Flag = True Or Multi = False Then
ListBox1.AddItem C.Offset(0, 0), N
ListBox1.List(N, 0) = C
ListBox1.List(N, 1) = C.Offset(0, 1).Text
ListBox1.List(N, 2) = C.Offset(0, 2).Text
ListBox1.List(N, 3) = C.Offset(0, 3).Text
ListBox1.List(N, 4) = C.Offset(0, 4).Text
N = N + 1
End If
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With
With Plage2
If Multi Then Set D = .Find(Recherche(0), LookAt:=xlPart) Else Set D = .Find(Recherche, LookAt:=xlPart)
If Not D Is Nothing Then
Adresse2 = D.Address
Do
Flag = True
If Multi Then
For J = 1 To UBound(Recherche)
If InStr(1, D, Recherche(J), vbTextCompare) = 0 Then
Flag = False
Exit For
End If
Next J
End If
If Flag = True Or Multi = False Then
ListBox2.AddItem D.Offset(0, 0), N2
ListBox2.List(N2, 0) = D
ListBox2.List(N2, 1) = D.Offset(0, 1)
ListBox2.List(N2, 2) = D.Offset(0, 2)
ListBox2.List(N2, 3) = D.Offset(0, 3)
ListBox2.List(N2, 4) = D.Offset(0, 4)
N2 = N2 + 1
End If
Set D = .FindNext(D)
Loop While Not D Is Nothing And D.Address <> Adresse2
End If
End With

For x = 1 To 8
Controls("Textbox" & x) = ""
Next x
If TextBoxRechCode = "" Then ListBox1.List = t
If TextBoxRechCode = "" Then ListBox2.List = t2
End Sub[/CODE]
 

JNP

XLDnaute Barbatruc
Re : filtre textbox comme dans Itune ......

Re :),
par contre est-ce que quelqu'un sait si il est possible qu'un bouton reste figé sur l'écran sans suivre les reste de la feuille pendant qu'la scroll pour que le bouton soit accessible à n'importe quel endroit de la feuille (je ne pux pas le mettre dans un menu personnalisé car ce dernier doit etre accessible sur tous les PC de l'entreprise...;)
Si tu met ton bouton sur la 1ère ligne et que tu figes tes volets, ça devrait le faire ;).
A + :cool:
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote