Salut.
Sans voir une copie de ta feuille, il es malaisé de comprendre ce que tu souhaites réellement obtenir. Perso, je m'y prendrais différemment.
Par exemple, même si je comprends bien que cette ligne est là à des fins de vérification, je n'écrirais pas MsgBox .Cells(num.Row, num.Column), mais MsgBox num.value, .Cells(num.Row, num.Column) pointe forcément vers num.
Je me méfie de Find et préfère m'en passer lorsque c'est possible. Or ici, je crois comprendre que la combobox1 est remplie avec les valeurs des cellules A1:AY1, de sorte que lorsque tu cliques sur une entrée de la combo, tu peux connaître la colonne qui a en fait été choisie. En sachant que les lignes de la combo commencent à 0, la colonne choisie est l'index de la combo +1... Dès lors, pas besoin de FIND pour trouver la colonne. Pour remplir la combobox, j'utilise sa propriété Column qui permet de transposer en lignes les valeurs de la plage A1:AY1.
Tu peux remplir la listbox grâce à sa propriété List qui permet d'éviter la boucle en lui passant le tableau des valeurs de la plage souhaitée lorsque cette dernière a été déterminée.
Dès lors, le code de remplissage de la combobox pourrait être celui-ci, à mettre dans le initialize du userform ou dans la procédure d'amorçage:
ComboBox1.Column = Worksheets("Liste").Range("a1:ay1").Value
Au clic sur le combo, on remplit alors la listbox avec le code suivant:
1 2 3 4 5 6 7 8 9 10
| Private Sub ComboBox1_Click()
Dim rng As Range
Dim LastRow As Long
ListBox1.Clear
Set rng = Worksheets("Liste").Cells(20, ComboBox1.ListIndex + 1)
LastRow = Worksheets("Liste").Cells(1048576, ComboBox1.ListIndex + 1).End(xlUp).Row
Set rng = rng.Resize(LastRow - rng.Row + 1)
ListBox1.List = rng.Value
End Sub |
N'hésite pas à avancer en pas à pas pour comprendre chaque ligne. Sans savoir ce que tu cherches exactement, je n'ai pu que supputer une solution qui est plus une illustration de la démarche à mettre en place plutôt qu'une solution fonctionnelle.
N'hésite pas à renommer tes contrôles dès le début de la création du userform
Partager