Problème de récupération valeurs Listbox.column

Bonjour à tous,

Je suis en pleine formation personnelle sur la Vba excel pour la création d'une BDD spécifique pour ma société.

J'ai créé un module de recherche Fournisseurs "Userform 3" avec 2 méthodes de recherche :

1) 3 Combobox en cascade (Merci à Thev pour cela), elles vont piocher dans la page "REF FOURNISSEUR" les Types, spécialités et produits existant pour me faire une liste des fournisseurs concernés. Avec cette liste de noms, je viens rechercher les coordonnées des fournisseurs dans la page "CONTACT FOURNISSEUR". (cela marche très bien)

2) Recherche intuitive multicolonne [Ubound / Lbound], pour le moment j'ai créé 2 listbox pour voir le fonctionnement de mes codes. listbox2 filtre du tableau / listbox3 récupère que les noms des fournisseurs.

Maintenant j'aimerai que pour chaque NOM (listbox3), je recherche la ligne correspondante sheets ("CONTAC FOURNISSEUR"),

Si le nom correspond, faire apparaître les lignes de sheets("CONTACT FOURNISSEUR") = Nom(listbox3) dans la listbox1.

Problème, quand je veux faire appel à la listbox2.column(4) ou listbox1.list, j'ai toujours une erreur soit d'object soit d'index...

Je n'arrive donc pas à récupérer la liste des valeurs...

SI vous pouviez m'aider, le fichier est en PJ (USF3)

Je vous remercie d'avance

recherche combobox recherche intuitive

Bonjour,

J'avais commencé à coder ceci:

'---// RETRANSCRIPTION FOURNISSEUR LISTBOX //---
If ListBox3.ListCount > 0 Then
    For I = 0 To ListBox3.ListCount - 1
        Nom = CStr(ListBox3.List(I))
        If Not dico.Exists(Nom) Or dico.Count = 0 Then
            dico.Add Nom, Nom
        End If
    Next I
End If

If ListBox1.ListCount > 0 Then
    For I = ListBox1.ListCount - 1 To 0 Step -1
        If Not dico.Exists(CStr(ListBox1.List(I, 0))) Then
            ListBox1.RemoveItem (I)
        End If
    Next I
End If

ça permettait de vider la listbox1 du contenu qui n'appartient pas aux fournisseurs affichés dans la listbox3, mais visiblement il y a des espaces au début et à la fin du nom de chaque fournisseur, ce qui rend cette opération impossible dans l'état actuel des choses, sais-tu d'où viennent ces espaces et à quoi ils servent? J'ai l'impression que c'est juste de la mise en forme...

Bonjour,

Je crois reconnaître le code de la recherche intuitive multi-mots multi-colonnes.

Boisgontier

Ce sont effectivement vos codes ,

j'adore votre site et vos explications, bravo

En revanche je crois que je suis trop limité pour raccorder mes petits codes avec les vôtres.

Bonjour,

J'avais commencé à coder ceci:

'---// RETRANSCRIPTION FOURNISSEUR LISTBOX //---
If ListBox3.ListCount > 0 Then
    For I = 0 To ListBox3.ListCount - 1
        Nom = CStr(ListBox3.List(I))
        If Not dico.Exists(Nom) Or dico.Count = 0 Then
            dico.Add Nom, Nom
        End If
    Next I
End If

If ListBox1.ListCount > 0 Then
    For I = ListBox1.ListCount - 1 To 0 Step -1
        If Not dico.Exists(CStr(ListBox1.List(I, 0))) Then
            ListBox1.RemoveItem (I)
        End If
    Next I
End If

ça permettait de vider la listbox1 du contenu qui n'appartient pas aux fournisseurs affichés dans la listbox3, mais visiblement il y a des espaces au début et à la fin du nom de chaque fournisseur, ce qui rend cette opération impossible dans l'état actuel des choses, sais-tu d'où viennent ces espaces et à quoi ils servent? J'ai l'impression que c'est juste de la mise en forme...

Justement, je ne trouve d'où viennent ces espaces, je suis parti sur le même principe que vous...

Re,

Comme on ne sait pas exactement d'où sortent les espaces, je suis allé chercher un petit peu en mode débogage, et le souci vient de "choix", qui contient des espaces, la première ligne que j'ai c'est : tbl(0) : "Tube * Tube Acier Allié * * * CTA * " : String : UserForm3.TextBox57_change

et le soucis c'est que CTA est entouré d'espaces ici, et qu'on ne les enlève pas lorsqu'on atteint cette ligne:

C(I + 1, x) = A(x)

Du coup j'ai fait :

C(I + 1, x) = Trim(A(x))

Du coup mon code "fonctionne", entre guillemet car quand tu enlèves des lettres ça ne rajoute pas à nouveau ce qu'il y avait avant, donc il faudrait déjà que je remette tout dans la listbox pour la vider ensuite, je regarde ça dans pas longtemps, mais en attendant je te transmets quand même ça:

fichier enlevé

EDIT:

Je viens de rajouter de quoi réinitialiser la listbox à chaque changement de la textbox, voici le résultat:

C'est pas rapide mais bon... ça contient 34 000 lignes en même temps!

Oui effectivement, il faudrait que j'adapte le nombre de ligne en fonction de ce qui est rempli dans mes tableaux.

Merci bien ça fonctionne

Re,

de rien, merci pour ton retour

Rechercher des sujets similaires à "probleme recuperation valeurs listbox column"