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 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
    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 à 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
          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. 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. 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. Contributeur
              Voici un exemple:

              http://www.cjoint.com/c/FBvr74sERZQ
              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
                  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. Bonjour, VBA c'est pas mon fort, mais pourquoi ne pas utiliser des combobox?