Zone de recherche en vba

Résolu
gl0ugl0u Messages postés 41 Statut Membre -  
gl0ugl0u 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

A voir également:

6 réponses

danielc0 Messages postés 1946 Statut Membre 238
 

Bonjour,

Désolé, je ne vois pas comment récupérer le fichier sans ouvrir un compte ?

Daniel


0
gl0ugl0u Messages postés 41 Statut Membre
 

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

0
via38 Messages postés 86 Statut Membre 23
 

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


0
gl0ugl0u Messages postés 41 Statut Membre
 

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

0
danielc0 Messages postés 1946 Statut Membre 238
 

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


0
gl0ugl0u Messages postés 41 Statut Membre
 

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?

0
danielc0 Messages postés 1946 Statut Membre 238
 

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


0
gl0ugl0u Messages postés 41 Statut Membre
 

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Danielco
 

C’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

0
gl0ugl0u Messages postés 41 Statut Membre
 

Oui oui pas de souci, je testerai la modif lundi matin au boulot ????

Bon weekend 

0
danielc0 Messages postés 1946 Statut Membre 238
 

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


0
gl0ugl0u Messages postés 41 Statut Membre
 

Hello,

C'est magnifique, merci à toi aussi bien pour le code que pour les explications.

Tu m'as motivé à me lancer dans l'apprentissage, j'ai souscrit sur Udemy :)

Merci beaucoup

0