Zone de recherche en vba
Résolugl0ugl0u Messages postés 41 Statut Membre -
Bonjour à tous,
Je fais appel à votre bienveillance pour m'aider à trouver le code adapté. Mes connaissances en vba sont proches de zéro, j'ai eu beau regarder différents forums et fichiers proposés en essayant d'adapter selon mon cas, j'ai toujours une erreur d'exécution en retour.
Même si c'est inutile de préciser, je suis sur Excel 2016...
Dans le fichier joint, je souhaite tout simplement pouvoir afficher dans la ListBox1 les différents résultats trouvés dans la colonne A de la feuil1 en fonction de la recherche de la Textbox1
Les critères de recherche doivent être "dynamiques" - pas sûr que ce soit la bonne expression, mais par exemple que le résultat s'affine au fur et à mesure de la saisie même si le critère de recherche est incomplet (i.e : pari va afficher paris, parigot, parisien etc etc...)
La colonne A est amenée à évoluer en terme de ligne dans le temps
Fichier ici
https://uploadnow.io/files/1kX1YGx
Merci par avance, j'ai mal au crâne depuis ce matin à force de regarder du code que je ne comprends pas
- Appel data zone franche
- App data - Guide
- Alternative zone telechargement - Accueil - Outils
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel privé - Guide
- Renvoi d'appel ooredoo ✓ - Forum Mobile
6 réponses
Bonjour
1) Poste ton fichier sur un site libre d'accès comme cjoint.com
2) Pour une recherche intuitivité voir les exemples et codes VBA donnés ici : http://boisgontierj.free.fr/
Cdlmnt
Via
Bonjour,
1) Désolé, je n'avais pas accès à cjoint depuis le travail, merci la stratégie d'entreprise. Bref, j'ai uploadé depuis chez moi un autre fichier du même genre
https://www.cjoint.com/c/OBhszzcqI5O
2) J'y ai passé la plus grande partie de mon après-midi à comprendre le fonctionnement. Il y a de nombreux exemples vraiment sympa mais je ne cherche pas de userform, juste un champ de recherche sur la feuille de calcul avec les résultats dans une listbox
Fais un clic droit sur Feuil2, clique sur "Visualiser le code" et colle cette macro :
Private Sub TextBox1_Change() Dim C As Range Me.ListBox1.Clear With Sheets("Feuil1") If Me.TextBox1.Value = "" Then For Each C In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) Me.ListBox1.AddItem C.Value Next C Else For Each C In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) If Left(C, Len(Me.TextBox1.Value)) = Me.TextBox1.Value Then Me.ListBox1.AddItem C.Value End If Next C End If End With End Sub
Enregistre.
La macro sélectionne les enregistrements dont le libellé commence par ce qui est saisi dans le textbox :
Daniel
Merci beaucoup pour ta rapidité, cela semble si facile :)
Cela fonctionne bien mais ce n'est pas tout à fait ce dont j'ai besoin. La première chaine de caractère (8364, 8365 etc... dans ton exemple) est justement l'information bien souvent inconnue que je souhaite mettre en avant
Il faut donc que la recherche puisse se faire sur l'intégralité du contenu du résultat, que ce soit "cuve" ou "B58" par exemple. Et cerise sur le gâteau, avoir un résultat si l'on saisi juste "cuv", comme dans un nb.si(A2;*"cuv"*)
De même, possible de clear la listbox une fois que la textbox est vidée?
Dans ce cas :
Private Sub TextBox1_Change() Dim C As Range Me.ListBox1.Clear With Sheets("Feuil1") If Me.TextBox1.Value = "" Then For Each C In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) Me.ListBox1.AddItem C.Value Next C Else For Each C In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) If InStr(1, UCase(C.Value), UCase(Me.TextBox1.Value)) > 0 Then Me.ListBox1.AddItem C.Value End If Next C End If End With End Sub
Daniel
Au top pour la recherche, il n'y a que la liste box qui ne se vide pas
Il faudra que je teste au boulot sur Excel 2016 - là je suis sur 2019 car j'ai eu des erreurs d'exécution cet aprem en testant un if inStr, le débogage pointait sur cette ligne sans savoir si c'était bien l'instruction qui déconnait ou non...
En tout cas merci pour ton aide, t'es une rockstar
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionC’est fait exprès quand la textbox est Vide, il n’y a aucune sélection puisqu’il n’y a aucun caractère dans la textbox. Je ferai la modification demain (C’est pas facile avec un téléphone).
Daniel
Bonjour à tous,
Voici le code modifié avec des explications en commentaire. Il n'y a aucun souci avec InStr et 2016. J'ai utilisé Excel 2016 pendant sept ans sans aucun problème.
'se déclenche quand le textbox est modifié Private Sub TextBox1_Change() Dim C As Range 'vidage du listbox Me.ListBox1.Clear 'tout ce qui commence par un "." se réfère à "Feuil1" With Sheets("Feuil1") 'si le textbox n'est pas vide If Me.TextBox1.Value <> "" Then 'pour chaque cellule de Feuil1 commençant à A2 jusqu'en bas For Each C In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) 'si la cellule contient la valeur du textbox If InStr(1, UCase(C.Value), UCase(Me.TextBox1.Value)) > 0 Then 'on ajoute la cellule dans le listbox Me.ListBox1.AddItem C.Value End If Next C End If End With End Sub
Daniel
Désolé, j'ai créé le fichier en urgence pour le poster ici avant de partir en week-end, je n'ai pas pensé à vérifier si on pouvait accéder au fichier facilement...
J'en ai recréé un autre de chez moi du coup et mis chez un autre hébergeur de confiance
https://www.cjoint.com/c/OBhszzcqI5O