VBA Liste déroulante à longueur variable dans userform

Bonjour,

Je cherche à afficher dans un userform (ici UF_Plantes) une liste déroulante dont les données sont rangées dans une feuille (fournisseurs).

Etant donnée que cette liste a un longueur modulable, j'aimerais que le code prenne en compte toutes les cellules remplies de la colonne B sur cette feuille fournisseurs, mais cela ne fonctionne pas...

J'ai beau chercher sur le forum, je ne trouve pas de solution...! Auriez-vous une réponse à m'apporter ? merci !

Je débute sur VBA (et le forum..!) Merci de votre indulgence

'Correspond au programme de la LISTE DEROULANTE

Private Sub UF_Plantes_Activate()

recap.Visible = True

recap.Unprotect

fournisseurs.Visible = True

fournisseur.Unprotect

Dim codelist As List

Dim lastrow As Long

Dim i As Long

Dim element As Variant

Dim j As Long

Set codelist = New List

lastrow = fournisseurs.Range("b1048576").End(xlUp).Row

'Remplissage de la liste de code

For i = 2 To lastrow

If (fournisseurs.Cells(i, 2) <> "") Then

codelist.Add (fournisseurs.Cells(i, 2))

End If

Next i

'Tri de la liste de code

codelist.Sort

With Me.CB_Fournisseur

For i = 0 To codelist.size - 1

CB_Fournisseur.AddItem (codelist.getElement(i))

Next i

End With

End Sub

48vba-plantes.xlsm (357.93 Ko)

Bonjour,

dans votre classeur vous créer un nom (par exemple Ma_liste) qui aura pour formule :

=DECALER(Fournisseur!$B$1;1;;NBVAL($B:$B)-1;)

Cette formule a pour action de créer une plage dynamique de votre liste allant de la cellule B2 décalée de Nombre de valeur dans la colonne B -1 de ligne.

Dans votre code VBA, il suffit d'utiliser l'instruction RowSource pour la définir comme étant le nom de votre liste Ma_Liste

@ bientôt

LouReeD

Bonjour LouReeD ,

Merci de votre réponse !

J'ai un peu honte mais malgré vos indications je n'ai pas réussi. A partir de la colonne B où se trouvent mes fournisseurs j'ai défini mon nom de liste. Jusqu'ici tout va bien n'est-ce pas ?

Comment puis-je désormais m'en servir en VBA ?

Il me faudrait quelque chose comme

CB_Fournisseur.RowSource = Liste_Fournisseur

mais je ne vois pas comment le coder...!

Merci beaucoup de votre aide

Bonsoir,

si c'est une ComboBox alors dans la fenêtre propriétés vous cherchez la ligne "RowSource" puis en face vous mettez :

=Liste_Fournisseur

A chaque fois que la Combobox sera chargée, elle sera mise à jour avec cette liste, comme cette liste est dynamique grâce à la formule, la ComboBox sera à jour, si je ne me trompe pas

@ bientôt

LouReeD

Bonjour LouReeD,

Merci de votre réponse claire, alors effectivement dans la combobox si j'utilise la propriété RowSource ça fonctionne bien !

En revanche il doit y avoir un souci avec ma fonction DECALER, car aucune entrée n'apparait.. Peut-être l'ai-je mal utilisée.

Dans mon classeur, j''ai défini un nom Liste_Fournisseur avec comme référence =DECALER(Fournisseurs!$B$1;1;NBVAL(Fournisseurs!$B:$B))

C'est bien ça ?

Merci de votre aide patiente !

Bonsoir,

une correction sur la formule, et les ";" sont tous utiles !

=DECALER(Fournisseur!$B$1;1;;NBVAL(Fournisseurs!$B:$B)-1;)

ce qui correspond à la première formule donnée, mais vous avez enlever les ";" !

@ bientôt

LouReeD

Bonsoir,

je conclus que l'appréciation sur le message vaut une résolution avec clôture ?!

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba liste deroulante longueur variable userform"