VBA Selection de la cellule en face de la valeur recherchée

Résolu
Bonjour,

Bon le titre n'est pas clair... Alors j'explique :

J'ai des valeurs dans ma colonne A. Il peut y avoir plusieurs fois la même valeur.

Je voudrai pouvoir rechercher une valeur de la colonne A, et que le programme me sélectionne les valeurs correspondantes situées dans la colonne B.

Et avec ces valeurs sélectionnées de la colonne B, je voudrai alimenter une combobox...

Ci-dessous ce que j'ai fait mais ca ne fonctionne pas...

    v_commande = commande.Value
  
'Recherche derniere ligne colonne A
    DerligA = Columns("A").Find("*", , , , , xlPrevious).Row
    Set Col_A = Range("A2:A" & DerligA)
'Pour diminuer le temps de recherche
    Nb_Tr = Application.CountIf(Col_A, v_commande)
    If Nb_Tr > 0 Then
        Lig = 1
        For Iter = 1 To Nb_Tr
            Lig = Columns("A").Find(v_commande, Cells(Lig, "A"), , xlWhole).Offset(0, 1).Select
        Next Iter
'            v_dpr = Selection
            With produit
                .RowSource = Selection
            End With
    End If


Pouvez vous m'aider s'il vous plait !!!

Merci

7 réponses

  1. je suis pas super en vba donc je vais te donner une idée plutôt algorithmique
    variables 
    recherche : chaîne 
    i:entier
    
    début
    i=1
      tant que (cellule("A"+i) != "")  //cellule("A"+i) retourne la valeur contenu par la cellule "Ai"
        si cellule("A"+i) == recherche alors
                ajouterCombo(cellule("B"+i))  //ajouterCombo est une procédure qui ajoute une valeur                 
                                                               //dans la combo
        fin si
        i=i+1
      fin tant que
    fin
    
    0
    1. Ci-dessous comment je l'ai inséré. Mais j'ai du louper un truc car ca ne fonctionne pas

          Dim Col_A As Range
          Dim DerligA, Lig As Integer, Iter As Long
          Dim v_commande, Nb_Tr As Long
      
      
          v_commande = commande.Value
        
      'Recherche derniere ligne colonne A
          DerligA = Columns("A").Find("*", , , , , xlPrevious).Row
          Set Col_A = Range("A2:A" & DerligA)
          
          Nb_Tr = Application.CountIf(Col_A, v_commande)
          If Nb_Tr > 0 Then
              Lig = 1
      
          For Iter = 1 To DerligA
              If Cells(Iter, 1) = v_commande Then
              produit.AddItem Cells(Iter, 2)
              End If
          Next
          
          End If
      0
      1. Inutile : (sauf si utilisation derriere)
        Nb_Tr = Application.CountIf(Col_A, v_commande)
            If Nb_Tr > 0 Then
                Lig = 1


        Et met plutot :
        Dim v_commande as Variant 

        Si tu veux le mettre dans un variable avant de le comparer dans un if mais sinon mais directement commande.Value dans ton If
        0
    2. Contributeur
      bonjour

      Curieux, ca me dit quelque chose ton code !!! ;o)
      lig = 1  
              For Iter = 1 To Nb_Tr  
                  lig = Columns("A").Find(v_commande, Cells(lig, "A"), , xlWhole).Row  
              '    v_dpr = Selection  
                   produit.AddItem Cells(lig, "B").Value  
              Next

      ATTention:
      on suppose que Produit est le nom de ton combo ?
      si oui, il faut préciser le nom de la feuille dans lequel il est situé
      ou s'il il est dans un userform écrire Me.produit

      a quoi sert v_dpr ?
      0
      1. Pourquoi ce code vous dit quelque chose ?
        J'essayerai votre solution demain !
        0
        1. Après multiple bidouilles, voici le code qui fonctionne...

          Private Sub produit_enter()
          
              Sheets("Base S").Select
          
              Dim Col_A As Range
              Dim DerligA, Lig, Iter As Integer
              Dim v_commande, Nb_Tr As Long
          
              v_commande = commande.Value
          
              With Worksheets("Base S")
          
                  DerligA = Columns("A").Find("*", , , , , xlPrevious).Row
                  Set Col_A = Range("A2:A" & DerligA)
              
                  Nb_Tr = Application.CountIf(Col_A, v_commande)
                  If Nb_Tr > 0 Then
                      Lig = 1
                      For Iter = 1 To Nb_Tr
                          Lig = Columns("A").Find(v_commande, Cells(Lig, "A"), , xlWhole).Row
                          produit.AddItem Cells(Lig, "B").Value
                      Next
                  End If
              
              End With
          
          End Sub


          Je vous remercie tous pour votre aide !
          0
          1. Bonjour,

            Tu t'embête pour rien la :D

            Deja tu essai de diminué le temps de recherche de quelque chose qui prend des micro seconde :D

            donc tu peux meme faire une methode bourrin et ça prendra moins de 0.1 sec

            du style :

            for i=1 to DerligA  
               if cells(i,1) = cequetucherche then 
                  combobox1.additem cells(i,2) 
               endif 
            next


            L'idée est la par contre je suis pas passé par VBA donc il y a peut etre 1 ou 2 faute de syntaxe.. Hésites pas si besoin de plus
            -1
            1. Met plutot ça :

                  Dim DerligA, Iter As Integer  
              
                  DerligA = Columns("A").Find("*", , , , , xlPrevious).Row  
                    
                  For Iter = 1 To DerligA  
                      If Cells(Iter, 1) = commande.Value Then  
                          produit.AddItem Cells(Iter, 2)  
                      End If  
                  Next


              testé et ok chez moi ;)
              -1