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

Résolu
Miss_tik76 Messages postés 27 Statut Membre -  
Miss_tik76 Messages postés 27 Statut Membre -
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. magicshark Messages postés 445 Statut Membre 13
     
    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
  2. Miss_tik76 Messages postés 27 Statut Membre 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. Submin Messages postés 463 Statut Membre 226
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. Miss_tik76 Messages postés 27 Statut Membre 1
     
    Pourquoi ce code vous dit quelque chose ?
    J'essayerai votre solution demain !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Miss_tik76 Messages postés 27 Statut Membre 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
  7. Submin Messages postés 463 Statut Membre 226
     
    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
  8. Submin Messages postés 463 Statut Membre 226
     
    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