VBA Selection de la cellule en face de la valeur recherchée [Résolu/Fermé]

Signaler
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
-
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
-
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

Messages postés
399
Date d'inscription
mardi 27 juillet 2010
Statut
Membre
Dernière intervention
6 mai 2014
17
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
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
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
Messages postés
382
Date d'inscription
vendredi 2 mars 2012
Statut
Membre
Dernière intervention
1 avril 2016
228
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
Messages postés
16433
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 avril 2021
3 162
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 ?
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
1
Pourquoi ce code vous dit quelque chose ?
J'essayerai votre solution demain !
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
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 !
Messages postés
382
Date d'inscription
vendredi 2 mars 2012
Statut
Membre
Dernière intervention
1 avril 2016
228
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
Messages postés
382
Date d'inscription
vendredi 2 mars 2012
Statut
Membre
Dernière intervention
1 avril 2016
228
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 ;)