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,

    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é!
    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
      1. Ben je t'envoi le fichier mais comment on fait?^^
        1. met ton email ici ou alors met le fichier sur un ftp
      2. 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.
        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
      3. 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?
        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
      4. 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
        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 ...
      5. 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!
        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
      6. 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!
        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 ...
      7. 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
        1. 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!!
          1. 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!
            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
          2. 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
            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
          3. 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
            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
              1. Bonjour
                Pourquoi ne pas récupérer le listindex de la liste ?!

                Cordialement