Vba boucle recherche

Résolu
Leeloo -  
 Leeloo -
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. Leeloo
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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....
      0
    2. Leeloo
       
      Merci Beaucoup avec la fonction find cela fonctionne .
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      De rien.
      Mais alors, juste par curiosité, c'était quoi ta liste déroulante? Combo ou ListBox?

      On ne l'a jamais su!!!
      0
    4. Leeloo
       
      Combo
      0
  2. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    0
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    quel est le nom de ta listbox contenant tes codes barres??
    0
  4. Paf
     
    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!
    0