Vba boucle recherche

Résolu/Fermé
Leeloo - Modifié par Leeloo le 20/07/2011 à 16:05
 Leeloo - 22 juil. 2011 à 12:55
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

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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 21/07/2011 à 15:53
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
Merci Beaucoup avec la fonction find cela fonctionne .
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
22 juil. 2011 à 08:35
De rien.
Mais alors, juste par curiosité, c'était quoi ta liste déroulante? Combo ou ListBox?

On ne l'a jamais su!!!
0
Combo
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juil. 2011 à 10:48
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 juil. 2011 à 15:36
Bonjour,

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