Chercher la valeur correspondent et le renvoyer dans listbox
bonjour, le forum, une nouvelle question, je cherche à renvoyer toutes les valeurs de la ligne d'une table de données qui correspondent à la valeur sélectionnée dans une listbox (L1) colonne(0) dans la liste (L2) .
L1 est alimenté par une base de données qui se trouve sur une feuille excel (ET PRIX), possède 8 colonnes et la valeur recherchée se trouve dans la colonne A en plusieurs fois (doublon).
j'ai un code que j'ai taper mais bien-sur elle ne fonctionne pas
Private Sub L1_Click()
Dim a, y, x, I
With Sheets("ET_PRIX")
y = L1.List(L1.ListIndex - 1, 0)
For x = 1 To .Range("A" & Rows.Count).End(xlUp).Row
Set a = .Columns(1).Find(Me.L1.List(y, 0), , , xlWhole)
If Not a Is Nothing Then
For I = 1 To 8
Me.L2.List(x - 1, I - 1) = .Cells(a.Row, I).Value
Next I
End If
Next x
End With
End Sub
voila si quelqu'un a compris ma demande et veux m'aider je suis open
merci d'avoir pris le temps de me lire !
Bonjour Ramsapat, bonjour le forum,
Avec le fichier ce serait tellement plus facile de t'aider...
re le forum
merci d'essayer de m'aider
ci joint le fichier
enfaîte je veux afficher mes sous détails de prix pour modif
Bonjour Ramsapat, bonjour le forum,
Il y a des références que je n'ai pas et donc impossible de lancer l'userform (même en décochant ces référence manquantes) via le bouton GO. J'ai quand même réussi à modifier le code dans ton fichier modifié en pièce jointe.
Le code :
Private E As Worksheet 'déclare la variable E (onglet ET_PRIX)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private Sub UserForm_Initialize()
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Set E = Sheets("ET_PRIX") 'définit l'onglet E
TV = E.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
With Me.L1 'prend en compte la listbox L1
For I = 3 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
If Not D.Exists(TV(I, 1)) Then 'si la clé n'existe pas dans le dictionnaire D
D.Add TV(I, 1), I 'ajoute la clé au dictionnaire D
.AddItem TV(I, 1) 'ajoute la donnée ligne I colonne 1 à la colonne 0 de la listbox L1
For J = 1 To 8 'boucle 2 : sur les 8 dernières colonnes de la listbox L1
.Column(J, .ListCount - 1) = TV(I, J + 1) 'ajoute la données lige I colonne J+1 de TV à la colonne J de la listbox L1
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de la listbox L1
aa = Sheets("BD_Prod").Range("A6:P" & Sheets("BD_Prod").Range("A" & Rows.Count).End(3).Row)
L3.List = aa
L1.ColumnCount = 9 'définit le nombre de colonnes de la listbox L1
L2.ColumnCount = 9 'définit le nombre de colonnes de la listbox L2
L3.ColumnCount = 15 'définit le nombre de colonnes de la listbox L3
End Sub
Private Sub L1_Click() 'ai clic dans la listbox L1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
With Me.L2 'prend en compte la listbox L3
.Clear 'efface le contenu de la listbox L2
For I = 3 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
If TV(I, 1) = Me.L1.Value Then 'condition : si la donnée ligne I colonne 1 de TV est égale à la valeur de la listbox L1
.AddItem TV(I, 1) 'ajoute la donnée ligne I colonne 1 à la colonne 0 de la listbox L2
For J = 1 To 8 'boucle 2 : sur les 8 dernières colonnes de la listbox L2
.Column(J, .ListCount - 1) = TV(I, J + 1) 'ajoute la données lige I colonne J+1 de TV à la colonne J de la listbox L2
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de la listbox L2
End Sub
Le fichier :
bonjour le forum ,ThauThème,
alors la ..