Tout d'abord, l'alimentation de ta combobox me chagrine un peu, je n'ai pu m'empêcher de l'améliorer, même si ce n'était pas la question.
Dans la liste présente dans ta combobox tu mets TOUTES les valeurs situés entre A2 et A65000!!!! Bref, dans l'exemple envoyé cela fait : 65000 - 5 noms = 64995 lignes VIDES!!!!
Autre soucis, si tu as dans ta feuilles excel des données jusqu'à la ligne 65005, les 5 dernières valeurs ne seront pas présente dans ta combobox
L'idéal est d'adapter la taille de ta liste en fonction du nombre réél de valeur :
VB:
Private Sub UserForm_Initialize()
' pour alimenter Listbox
ComboBox1.List() = Range("A2:A" & [A2].End(xlDown).Row).Value
End Sub
ou :
VB:
Private Sub UserForm_Initialize()
' pour alimenter Listbox
ComboBox1.List() = Range("A2:A" & [A65535].End(xlUp).Row).Value
End Sub
gerardd3617 à dit:
le code me donne la position du curceur dans la feuille
Je pensais que tu voulais cela! En faite, si je traduis mieux ta pensé, en faite tu veux la position du nom dans ta liste figurant DANS ta combobox. C'est bien ça?
Si oui, il faut placer le code ci-dessous dans ta macro Private Sub ComboBox1_Change()
VB:
'numéro ligne
TextBox3 = ComboBox1.ListIndex + 1
Le code "ListIndex + 1" permet de récupérer le numéro de la ligne sélectionner dans la ComboBox indiqué.
On met "+1" car pour Excel :
-> la première ligne de la combobox a pour numéro : 0
-> la seconde ligne de la combobox a pour numéro : 1
-> ...
Testé, tout fonctionne... à condition de supprimer ta ligne de code ci-dessous qui met la pagaille dans ma solution
J'ai regardé en diagonal le reste de ton code, j'ai vu que tu avais créé la variable : DerLign où tu mets le numéro de la dernière ligne de ton tableau de donnée.
Dans ce cas, tu peux définir cette variable comme "Variable Public" et l'utiliser dans TOUTES tes macros
Ce qui donnerais dans le code transmis tout à l'heure :
VB:
Private Sub UserForm_Initialize()
' pour alimenter Listbox
ComboBox1.List() = Range("A2:A" & DerLign).Value
End Sub
connaitre la ligne sert a rien dans ton cas il faut utiliser ListIndex suffisant
un exemple tres basique dans ton cas j'ai rajouter un bouton pour modifier pour voir le principe
la combo se nomme C1 si plus de 2 textboxs a remplir .. il faut faire une boucle pour remplir plus simple