Bonjour,
Tes erreurs :
Lorsque tu veux remplir la listbox d'un second UserForm à partir du premier, il faut préciser l'userform en question. Par défaut, VBA pense que tu veux remplir la listbox1 de l'usf1 qui n'existe pas ===> plantage. D'ou :
UserForm2.ListBox1.AddItem
La syntaxe également :
Find.Next n'existe pas. Voir FindNext
Ne pas oublier l'espace après AddItem :
UserForm2.ListBox1.AddItem .Range("B" & RngCherché.Row)
Un exemple qui fonctionne :
1 userform comprenant : 1 combobox et des textbox
1 userform comprenant : 1 listbox
Code de l'Userform1 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| Option Explicit
'Cette variable sert à ne pas déclencher la procédure
'ComboBox1_Change lors du chargement de l'Userform
Dim Test As Boolean
'Procédure déclenchée au chargement de l'Userform1
Private Sub UserForm_Initialize()
Dim Lig As Long, DrLig As Long
Dim Cell As Range
Test = False
'remplissage de la combobox "référence" sans doublons
'cf : http://excel.developpez.com/faq/?page=OleObject#DoublonComboBox
DrLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
'Supprime les données existantes dans le ComboBox
ComboBox1.Clear
'Boucle sur les cellules de la colonne A pour
'alimenter le ComboBox
For Each Cell In Sheets(1).Range("A2:A" & DrLig)
ComboBox1 = Cell
'remplissage sans doublon
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Cell
Next Cell
ComboBox1.ListIndex = -1
Test = True
End Sub
'Procédure déclenchée à chaque changement dans la ComboBox1 (références)
Private Sub ComboBox1_Change()
Dim RngCherché As Range
Dim firstAddress As String
If ComboBox1 = "" Or Test = False Then Exit Sub
UserForm2.ListBox1.Clear
With Sheets(1)
Set RngCherché = .Columns(1).Cells.Find(ComboBox1, lookat:=xlWhole)
If RngCherché Is Nothing Then
MsgBox "Valeur non trouvée"
Else
firstAddress = RngCherché.Address
Do
UserForm2.ListBox1.AddItem .Range("B" & RngCherché.Row)
Set RngCherché = .Columns(1).Cells.FindNext(RngCherché)
Loop While Not RngCherché Is Nothing And RngCherché.Address <> firstAddress
End If
End With
Set RngCherché = Nothing
UserForm2.Show
End Sub |
Code de l'UserForm2 :
1 2 3 4 5 6 7 8
| Option Explicit
Private Sub ListBox1_Click()
'cf : http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G
If ListBox1.ListIndex = -1 Then Exit Sub
UserForm1.TextBox1.Value = ListBox1.List(ListBox1.ListIndex)
UserForm2.Hide
End Sub |
Un classeur exemple
Partager