Comment coder rechercheV en VBA sur excel?

Résolu
Bonjour,
J'ai crée une userform avec une liste déroulante dans laquelle j'ai placée une liste d'entreprise.
Ensuite on clique sur rechercher et cela doi afficher le nom de l'entreprise et tous ses composants.
Il faut savoir que a base de donnée contient 2 colonnes, une pour les entreprises et la seconde pour tous les composants que l'entreprise vends.

Je sais faire rechercheV dans excel mais il faudrait que je le code et je n'y arrive pas.

Si quelqu'un peu m'aider!!
Merci d'avance!

Petitlila
Configuration: Windows XP
Internet Explorer 7.0

16 réponses

  1. Bonjour
    Pourquoi ne pas récupérer le listindex de la liste ?!

    Cordialement
    0
    1. Bonsoir,
      a moins de vouloir absolument utiliser un USF
      le plus rapide serait de faire une liste de validation et d'utiliser la Recherchev
      C'est moins joli ... mais c'est rapide

      On peut utiliser aussi une ComboBox (liste déroulante) avec LinkCell (la cellule qui change en fonctuion du choix) et FillRange (la liste des tous les choix possibles...

      @+ LM
      0
      1. Bonjour,
        Alors tout d'abord merci de m'avoir répondu!
        Pour DDalmont, je ne connaissais pas cette fonction merci! Mais comment on fait pour la récupéré la taille des colonnes a une importance? car j'ai 500 lignes!

        Pour LexMarc, utilier la liste de validation et utiliser la Recherchev,je vois pas.
        J'utilise deja une comboBox avec dedans toutes mes entreprises et je voudrais que quand on en choissise une et que l'on clique sur valider que cela m'affiche la ligne entiere de l'entreprise (nom entreprise + ses composants)dans une autre feuille.

        Merci!

        Petitlila
        0
        1. Bonjour,
          J'ai essayée ça :

          Private Sub CommandButton1_Click()
          Dim formulaire As Object
          Dim intRangee As Integer

          Label2.Caption = ComboBox1.Value

          Label2.Caption.AddItem formulaire.Cells(intRangee, 2)

          End Sub

          et ça me marque "erreur de compilation qualificateur incorrect".

          Si quelqu'un trouve ce qu'il ne va pas!

          Merci d'avance!

          Petitlila
          0
          1. Private Sub CommandButton1_Click()
            Dim formulaire As Object
            Dim intRangee As Integer >>>> il faudrai lui assigner une valeur

            Label2.Caption = ComboBox1.Value

            Label2.Caption.AddItem formulaire.Cells(intRangee, 2) 'N oublie pas qu'un label n est pas une liste deroulante
            ma ligne proposee serai donc NOMDETACOMBOBOX.AddItem formulaire.Cells(intRangee, 2).value
            formulaire je ne sais pas trop a quoi ce la correcpond peut etre >>> worksheets("formulaire").cells....

            End Sub
            0
        2. Merci!
          Mais ça me marque "erreur de compilation membre de methode ou de données introuvables"

          voici le code :

          Private Sub CommandButton1_Click()
          Dim formulaire As Object
          Dim intRangee As Integer

          Label2.Caption = ComboBox1.Value

          CommandButton1.AddItem Worksheets("formulaire").Cells(intRangee, 2).Value

          End Sub

          cela me surligne private sub ... en jaune!

          et formulaire je me suis trompée il faut mettre BD c'est le non de ma feuille ou se trouve le tableau!
          0
          1. mais quesque tu voudrais que ton code face exactement je n ai pas tout compri, et aussi pour ta combo >>>> ComboBox1.Text ca sera mieu
            bon courage
            0
        3. Donc, j'ai crée une userform qui comporte une combobox avec le nom des entreprises (colonne A de la feuille BD) et deux boutons Rechercher et Quitter.

          Dans ma feuille BD il y a trois colonne A = entreprises et B = tous les produits qu'elle fabrique et C = divers.

          L'utilisateur choisi dans la combobox le nom de l'entreprise dont il veut voir se qu'elle fabrique il clique sur Recherche et le nom de l'entreprise choisi et ses composants doivent d'afficher dans un label sur l'userform.

          J'ai deja réussi a afficher l'entreprise choisi mais je n'arrive pas a afficher ses composants.

          If faudrait afficher la ligne du fabricant choisi (colonne A, B, C)

          Ca fait un moment que je suis dessus en plus suis sûre que c'est un truc tout facile!

          Merci de l'aider!!
          0
          1. ca n irai pas mieu en supprimant le bouton de recherche, quand on selectionne un element dans la comboboxNomEntreprise cela rempli la seconde comboboxArticle et quand on selectionne dans cette derniere cela rempli un label avec les divers autre info (colonne C).
            Voir dans le label un resumer de tout. dit moi ce que tu en pense
            0
            1. Ce serais plus simple?
              Fin en tout cas il y a qu'une combobox, celle des entreprises.
              Donc en gros des que l'utilisateur choisi son entreprise il y a 2 labels en dessous dans le 1 il y a la colonne b et dans le label 2 il y a la colonne c?

              Oui en tt cas se serais plus simple visuellement!

              Mais pour coder se que je n'arriv pas c'est d'attribuer une colonne à 1 label!
              0
              1. Je vais te donner une bonne partie du code, ce aui est en majuscule est a adapter

                Cette partie dans la macro appellant l ouverture de la fenetre, la ou ce trouve le .show ou .load
                for t = 8 to 500'a la place du 8 le debut du nom des entreprises, et a la place du 500 la ligne max de ta feuille
                if Worksheets("NOMFEUILLE").Cells(t, 1) <> "" then
                UserForm1.ComboBoxENTREPRISE.AddItem Worksheets("INV").Cells(t, 1).Value
                t = t + 1
                endif
                next t

                cette partie tu la met dans la comboboxENTREPRISE, tu clic 2 fois dessu sous VBA pour faire apparaitre le code et tu met ceci:

                if UserForm1.ComboBoxENTREPRISE.text <> "" then
                a=8
                Do While Worksheets("NOMFEUILLE").Cells(a, 1) <> UserForm1.ComboBoxENTREPRISE.text
                a =a + 1
                Loop
                b=a+1
                Do While Worksheets("NOMFEUILLE").Cells(b, 1) =""
                b =b + 1
                UserForm1.ComboBoxARTICLE.AddItem Worksheets("NOMFEUILLE").Cells(b-1, 2).Value
                Loop
                else
                UserForm1.ComboBoxARTICLE.clear
                endif

                Et enfin la derniere partie que tu met dans ComboBoxARTICLE
                if UserForm1.ComboBoxARTICLE.text <> "" then
                a=8
                Do While Worksheets("NOMFEUILLE").Cells(a, 2) <> UserForm1.ComboBoxARTICLE.text
                a =a + 1
                Loop
                NOMDULABEL.text =While Worksheets("NOMFEUILLE").Cells(a, 3)
                else
                NOMDULABEL.text = ""
                endif

                si tu as d question ...
                0
            2. Alors, j'ai testé, ton premier code marche!

              Pour le deuxieme, j'y ai changé quelques trucs car je n'es pas de deuxieme comboboxarticle mais un label que j'ai apeller Désignation

              et pour le troisieme je l'ai mi dans le label divers mais ça me met ça me met une erreur la ou c'est souligné sa marque "membre de méthode ou de donnée introuvable"

              Private Sub Divers_Click()
              If UserForm1.Désignation.Text <> "" Then
              a = 8
              Do While Worksheets("BD").Cells(a, 2) <> UserForm1.Désignation.Text
              a = a + 1
              Loop
              UserForm1.Divers.text = While Worksheets("BD").Cells(a, 3)
              Else
              Divers.Text = ""
              End If

              End Sub

              et je n'es pas compris les a et les b ils correspondent a quoi?
              en tout cas merci vraimant de passer du temps sur mon problème!
              0
              1. UserForm1.Divers.text = Worksheets("BD").Cells(a, 3).value
                les a et les b c est .... je saurai pas t expliquer clairement comme ca mais ce son de simple variable qui serve a faire avancer le programme et a ce deplacer dans le tableau
                0
            3. En fait me suis trompé c'est ce code la qui pose problème à la compilation :

              Private Sub ComboBox1_Change()

              If UserForm1.ComboBox1.Text <> "" Then
              a = 2
              Do While Worksheets("BD").Cells(a, 1) <> UserForm1.ComboBox1.Text
              a = a + 1
              Loop
              b = a + 1
              Do While Worksheets("BD").Cells(b, 1) = ""
              b = b + 1
              UserForm1.Désignation.AddItem Worksheets("BD").Cells(b - 1, 2).Value
              Loop
              Else
              UserForm1.Désignation.Clear
              End If
              0
              1. mais ici c est un code pour une combobox si Désignation n en est pas une ca m ira pas, et tkt j ai rien d autre a faire au boulo ...
                0
            4. lol ok!
              Bon pour "UserForm1.Divers.text = Worksheets("BD").Cells(a, 3).value" il y a plus d'erreurs!

              Et non une deuxième combobox se serait pas pratique pour certaines entreprises il y a une quinzaine de composants se serait pas pratique a lire et il y a pas un problème sur le code :

              Private Sub ComboBox1_Change()

              If UserForm1.ComboBox1.Text <> "" Then
              a = 2
              Do While Worksheets("BD").Cells(a, 1) <> UserForm1.ComboBox1.Text
              a = a + 1
              Loop
              b = a + 1
              Do While Worksheets("BD").Cells(b, 1) = ""
              b = b + 1
              UserForm1.Désignation.AddItem Worksheets("BD").Cells(b - 1, 2).Value
              Loop
              Else
              UserForm1.Désignation.Clear
              End If
              ?

              Elles se finissent pas les boucles c normal?

              Donc en gros ce code il doit rechercher dans la colonne b la cellule qui est associé au résultat du combobox et l'afficher dans le label Désignation

              Donc il doit avoir qu'une seule boucle non? celle ou il recherche le nom de l'entreprise?
              0
              1. mais en faite jme suis imagine ton fichier excel et jme suis di que c etait disposer comme ceci, di moi si je me trompre

                boite 1| article1 |comment
                | article2 |comment
                | article3 |comment
                | article4 |comment
                | article5 |comment
                boite 2| article1 |comment
                | article2 |comment
                | article3 |comment
                .... et ainsi de suite
                di moi si je sui a cote de la plaque

                alors ce morceau de code recherche l entreprise selcetionnee, le numero de la ligne(a), continue a avancer avec la 2 eme boucle (b) qui s arrete avant la prochaine entreprise. et puis on prend les article de a jusque b et on les met dans la combobox, dans un label je ne sais pas comment cava se passer ...

                edit: il y aura un probleme pour la derniere entreprise, la variable b va defenir infinie, je t enverrai un petit if a remettre par la suite
                0
            5. En fait il est comme ça :

              entreprise1 description divers
              blabla1 led, boulon, carte (la il y a rien au cas ou les futurs utilisateurs voudront mettre quelque chose)
              blabla2 mémoire, étiquette /
              ...
              ...

              il y a que la colonne c (divers ) qui est vide.
              Ok j'ai compris pour a, b mais on peut pas faire plus simple fin je veux dire c'est super compliqué!
              la combobox est deja remplit avec RowSource.
              0
              1. ui c est surement possible mais je n ai pas trop d idee pour faire plus simple, desole mais je n ai toujours pas tres bien compri a quoi ta feuille ressemblai
                0
            6. Ben je t'envoi le fichier mais comment on fait?^^
              0
              1. met ton email ici ou alors met le fichier sur un ftp
                0
            7. Bonjour,

              g33ebt5cax28858@jetable.net
              0
              1. Bonjour,

                alors j'ai trouvé un code que j'ai modifié.

                Il y a toujours la combobox et en dessous j'ai enlevé les labels et mis a la place une texbox.
                Mais j'ai une erreur dans mon code et je 'arrive pas a la corrigé!

                Private Sub ComboBox1_Change()
                Fabricant = ComboBox1.Value

                Columns(1).Find(Fabricant, , , , , Previous).Select
                Désignation = Selection.Offset(0, 1).Value
                Divers = Selection.Offset(0, 2).Value

                TextBox1. AddItem"Désignation " & Désignation <= l'erreur se trouve a AddItem
                TextBox1.AddItem "Divers " & Divers

                End Sub

                Et je voudrais aussi que des qu'on choisi une nouvelle entreprise dans la combobox on initialise a 0 a texbox (que la textbox soi blanche)!

                merci d'avance!

                Petitlila
                0
                1. Bonjour,

                  J'ai trouvée!!
                  Je met la réponse comme ça si quelqu'un en a besoin...
                  Il n'est pas parfait par exemple quand l'entreprise n'est pas dans la combobox il se bloque.
                  donc...

                  Code de la combobox :

                  Private Sub ComboBox1_Change()
                  Fabricant = ComboBox1.Value

                  Columns(1).Find(Fabricant, , , , , Previous).Select
                  Désignation = Selection.Offset(0, 1).Value
                  Divers = Selection.Offset(0, 2).Value

                  TextBox1.Text = "Désignation : " & Désignation
                  TextBox2.Text = "Divers : " & Divers

                  End Sub

                  Code bouton Quitter

                  Private Sub CommandButton2_Click()
                  Unload UserForm1
                  End Sub

                  Private Sub UserForm1_Initialize()
                  Range("A2").Select

                  For Compteur = 1 To 20

                  ValeurFabricant = ActiveCell
                  ActiveCell.Offset(1, 0).Select

                  ComboBox1.AddItem ValeurFabricant

                  If ValeurFabricant = "" Then
                  Exit For
                  End If
                  Next Compteur
                  End Sub

                  Il n'est pas parfait il y a des erreurs mais il marche!

                  En tout cas merci aux personnes qui m'ont aidé!
                  0