Textbox intuitive

Résolu
Bonjour,
je fais appel aux plus compétent que moi,
voila mon soucis,
dans un userform, il y a :
textbox3 = client
textbox4 = materiel
listbox1 = liste de materiel
listbox2 = liste de client

si je clique sur un nom ds la listbox2, celui ci se met ds le textbox3
si je clique sur un materiel ds la listbox1, celui ci se met ds le textbox4
jusque la tout va bien

mais ce que je n'arrive pas, c'est que je souhaite taper la premier lettre du nom ds le textbox3, "textbox intuitive" , et que ds la listbox2 se filtre automatiquement au fur et a mesure de taper les lettres, et idem pour le textbox4 - listbox1

j'ai trouver beaucoup de code a ce sujet, mais en les appliquant cela ne fonctionne pas

merci a tous ceux qui pourrons m'aider
Max

10 réponses

  1. Bonjour, VBA c'est pas mon fort, mais pourquoi ne pas utiliser des combobox?
    1. Contributeur
      Bonjour,

      comme ceci:

      Option Explicit
      Dim a, d1, tmp, c
      Private Sub UserForm_Initialize()
        a = Range("A1:A195").Value 'remplir la listbox
        Me.ListBox1.List = a
      End Sub
      Private Sub TextBox1_Change()
         Set d1 = CreateObject("Scripting.Dictionary")
         Me.ListBox1.Clear
         tmp = UCase(Me.TextBox1) & "*"
         For Each c In a
           If UCase(c) Like tmp Then d1(c) = ""
        Next c
        Me.ListBox1.List = d1.keys
      End Sub

      1. merci a ceux qui ont repondu,

        slt cs_Le Pivert,
        j'ai mis le code que tu as ecri, et qd je tape une lettre ds le textbox3, j'ai une erreur, "erreur de compilation, Projet ou bibliotheque introuvable", ds private sub textbox3_change, le "d1" me pose probleme
        1. Contributeur
          Voici un exemple:

          http://www.cjoint.com/c/FBvr74sERZQ
          1. oui c'est tout a fais ca,
            sauf que sur mon classeur cela ne fonctionne pas,
            pour info :
            un classeur avec plusieur feuille
            sur l'userform que je veux que sa sois comme ca, est sur une feuille nommer "ANNEXE", ou se trouve en colonne A les noms de client, en colonne B le materiel,

            et qd je met ce code, cela ne fonctionne pas, toujour cette erreur de compilation
            1. une petite modif : je me suis tromper sur le code et sur ma reponse, car je disais que le"d1" me posais probleme, en faite c'est "dl" et non "d1", donc j'ai modifier, mais maintenant j'ai toujour ce probleme d'erreur mais c'est "UCase" dans la ligne :
              tmp = UCase (me.textbox3) & "*"
          2. je me suis renseigner sur ce fameux"UCase", donc c'est "Retourne une chaîne ou un caractère contenant la chaîne spécifiée convertie en majuscules.", le faite qu'il me posais probleme je l'ai retirer de mon code, ce qui fonctionne, youpi, ms un autre probleme se pose encore,
            comme je l'avais stipuler :
            textbox3 = client
            textbox4 = materiel
            listbox2 = liste de client
            listbox1 = liste de materiel

            en ouvrant mon userform, textbox3 et textbox4 sont vide, ok
            listbox2 est alimenter en client
            listbox1 est alimenter en materiel
            si je tape une lettre correspondante a un nom ma listbox2 se vide, et si je reviens en arriere la liste reviens ma c'est la liste de materiel,

            donc a l'ouverture de l'userform tout va bien, ms une fois la lettre taper ds le textbox3, les deux listbox et textbox sont indentique
            1. Contributeur
              Tout est dans le remplissage des listBox.
              voici un exemple avec 2 listBox, avec les données dans 2 feuilles différentes. A toi de l'adapter à tes feuilles:

              http://www.cjoint.com/c/FBwfTYu8b3Q
              1. Bonjour à tous
                Mon problème de listbox et textbox identique est régler en faite fallait simplement dans userform initialise mettre : a= range("A2:A195").value et a1=("B2:B195").value
                Par contre après toute ces modif tout fonctionne c'est cool mais après l'avoir mis sur le pc a mon boulot j'ai une erreur 70 permission refuser donc je vais me pencher sur la question
                1. Contributeur
                  Si tu as des problèmes, voici une seconde approche. Se servir d'une seule listbox et d'un seul textbox pour afficher 2 listes à l'aide d'un CheckBox:

                  http://www.cjoint.com/c/FBxkM3Un1RQ
                  1. Bonjour a tous,
                    oui cs_Le Pivert, effectivement cette méthode est bien aussi, ms finalement, tous va bien, j'avais le soucis du message d'erreur 70, et j'ai simplement copier le ficher de ma clé USB sur mon pc du boulot et cela fonctionne,
                    en tout cas je te remercie
                    et je met le code complet pour aider et intéresser d'autre personne

                    Option Explicit
                    Dim a, a1, d1, tmp, c
                    
                    Private Sub ListBox1_Click()
                    If UserForm3.ListBox1.ListIndex = -1 Then Exit Sub
                    TextBox4 = ListBox1.Value
                    End Sub
                    
                    Private Sub ListBox2_Click()
                    If UserForm3.ListBox2.ListIndex = -1 Then Exit Sub
                    TextBox3 = ListBox2.Value
                    End Sub
                    
                    Private Sub TextBox3_Change()
                       Set d1 = CreateObject("Scripting.Dictionary")
                       Me.ListBox2.Clear
                       tmp = (Me.TextBox3) & "*"
                       For Each c In a
                         If (c) Like tmp Then d1(c) = ""
                      Next c
                      Me.ListBox2.List = d1.keys
                      
                    End Sub
                    
                    Private Sub TextBox4_Change()
                       Set d1 = CreateObject("Scripting.Dictionary")
                       Me.ListBox1.Clear
                       tmp = (Me.TextBox4) & "*"
                       For Each c In a1
                         If (c) Like tmp Then d1(c) = ""
                      Next c
                      Me.ListBox1.List = d1.keys
                    End Sub
                    
                    Private Sub UserForm_Initialize()
                      a = Range("A2:A500").Value 'remplir la listbox
                      Me.ListBox2.List = a
                     a1 = Range("B2:B500").Value 'remplir la listbox
                      Me.ListBox1.List = a1
                    End Sub