Vba boucle recherche

Résolu
Bonjour,

j'ai un tableau excel dans lequel j'ai renseigner un stock de materiel
code barre, Designation, n° de serie.

Dans un formulaire je fait une liste deroulante avec les code barre.
Je voudrait selon le code barre selectionner faire afficher la Designation et le n° de serie.

j'ai tester ce code mais quand je change de code barre la designation et le n° de serie ne change pas.

For Each Cell In Range("E:E")
If Cell.Value = N_Serie Then
Designationl.Caption = ActiveCell.Offset(0, -2).Value
N_Serie.Caption = ActiveCell.Offset(0, -1).Value
End If
Next

4 réponses

  1. Bonjour,

    Juste une question, ce code, tu l'as placé ou???

    Pour qu'il s'actualise, il faut qu'il soit là :

    'Listbox1 étant ta liste déroulante de ton formulaire
    ' ce code est à placer dans ton formulaire
    Private Sub ListBox1_Click()

    For Each Cell In Range("E:E")
    If Cell.Value = N_Serie Then
    Designationl.Caption = ActiveCell.Offset(0, -2).Value
    N_Serie.Caption = ActiveCell.Offset(0, -1).Value
    End If
    Next

    End Sub
    1. il est bien dans le bon sub par contre je sais pas si il faut mieux click ou change.

      le texte apparait bien mais ne change pas quand je change de N_Serie
      1. Modérateur
        Bonjour,
        1- Ta "Liste déroulante" est une combobox ou une listbox?
        2- ceci ne peux pas fonctionner :
        For Each Cell In Range("E:E")   
        If Cell.Value = N_Serie Then   
        Designationl.Caption = ActiveCell.Offset(0, -2).Value   
        N_Serie.Caption = ActiveCell.Offset(0, -1).Value
        Ben oui ActiveCell et Cell sont différents...
        Pour que Cell devienne ActiveCell, il faut la sélectionner.

        Essaye ce test dans un module, tu comprendras ce qui cloche :
        Sub test()  
        Dim Cell As Range  
        For Each Cell In Range("E1:E5")  
        MsgBox "La cellule active ""activecell"" est : " & ActiveCell.Address  
        MsgBox "La cellule appelée ""Cell"" dans la macro est : " & Cell.Address  
        Next  
        End Sub

        Pour résoudre ton souci:
        Pour le cas d'une combobox :
        Private Sub ComboBox1_Change()  
        Dim Cell As Range  
        For Each Cell In Range("E:E")   
        If Cell.Value = ComboBox1.Value Then   
            Designationl.Caption = Cell.Offset(0, -2).Value   
            N_Serie.Caption = Cell.Offset(0, -1).Value   
            Exit For 'permet de sortir de la boucle avant de se taper 1000000 de lignes  
        End If  
        Next  
        End Sub

        Pour le cas d'une ListBox :
        Private Sub ListBox1_Click()  
        Dim Cell As Range  
        
        If ListBox1.ListIndex = -1 Then Exit Sub  
        For Each Cell In Range("E:E")  
        If Cell.Value = ListBox1.List(ListBox1.ListIndex) Then  
            Designationl.Caption = Cell.Offset(0, -2).Value  
            N_Serie.Caption = Cell.Offset(0, -1).Value  
            Exit For 'permet de sortir de la boucle avant de se taper 1000000 de lignes  
        End If  
        Next  
        End Sub


        J'ajouterais, si vous le permettez que la boucle n'est pas une nécessité.
        En effet, si vous remplissez votre liste avec les valeurs contenues dans la colonne E, vous savez que ces-dites valeurs se trouvent à la fois dans la liste et dans la colonne. de ce fait, la méthode find est appropriée :

        Cas de la Combobox :
        Private Sub ComboBox1_Change()  
        Dim Lig As Long  
        Lig = Columns(5).Cells.Find(ComboBox1.Value).Row  
        Designationl.Caption = Cells(Lig, 3).Value  
        N_Serie.Caption = Cells(Lig, 4).Value  
        End Sub

        Cas de la ListBox :
        Private Sub ListBox1_Click()  
        Dim Lig As Long  
        If ListBox1.ListIndex = -1 Then Exit Sub  
        Lig = Columns(5).Cells.Find(ListBox1.List(ListBox1.ListIndex)).Row  
        Designationl.Caption = Cells(Lig, 3).Value  
        N_Serie.Caption = Cells(Lig, 4).Value  
        End Sub

        Je n'ai rien testé, donc si ça ne fonctionne pas, merci de ne pas me taper et me dire ce qui ne va pas....
      2. Merci Beaucoup avec la fonction find cela fonctionne .
      3. Modérateur
        De rien.
        Mais alors, juste par curiosité, c'était quoi ta liste déroulante? Combo ou ListBox?

        On ne l'a jamais su!!!
    2. Bonjour,

      quel est le nom de ta listbox contenant tes codes barres??
      1. bonjour,
        quel est le nom de la listbox ? N_Serie?

        a priori non, et rien ne fait référence à l'élément sélectionné dans la listbox.

        qu'est ce qu'on trouve en colonnes, E , C , D

        N_Serie est un Label ?

        A+ avec quelques précision!