Actualisation Listbox en fonction du contenu d'une ComboBox

Juliettedrev - 31 mai 2016 à 17:05
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 1 juin 2016 à 18:44
Bonjour,
J'ai créé un userform avec une combobox "région" et une listebox "ville".
Je souhaite que ma listbox "s'actualise" en fonction de la sélection de ma combobox.
Par exemple, si je sélectionne "Ile de France" dans ma combobox, ma listbox me propose uniquement les villes correspondantes à la région.
J'ai déjà ma data région/ville sur excel, mais je n'arrive pas à lier la combobox avec la listbox et à faire les conditions.

Merci par avance de votre aide !

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 31/05/2016 à 17:12
Bonjour,
Tu as ouvert cette discussion dans le forum général Visual Basic, si bien que l'on ne sait pas quel est ton outil de développement.
Ta seconde phrase mentionne que tes données sont sur un tableur Excel, mais on ne sait pas si tu les traites également depuis VBA/Excel ou depuis une autre application.
A préciser, s'il te plait.
Il serait également bien que tu nolus montres le bout de code par lequel est alimentée ta combobox. Et que tu nous précises dans la foulée comment sont réparties, sur tes feuilles de calcul, les régions et leurs villes (cela va de soi)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
bilbo50 Messages postés 23 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 27 janvier 2020
Modifié par bilbo50 le 31/05/2016 à 17:16
Bonjour

Tu fais cela sur Excel ?

 BILBO50
0
Juliettedrev Messages postés 5 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 1 juin 2016
1 juin 2016 à 15:15
Bonjour,
Effectivement ce n'était pas très clair. J'utilise Visual Basic sur Excel.
Mes données sont stockées sur une des feuilles de mon classeur excel.
Concernant l'alimentation de la combobox je l'ai fait par "RowSource" dans les propriétés.
Enfin mes données "ville" et "région" sont stockées sous la forme : colonne A : toutes mes régions et colonnes B,C,D,... mes villes. Néanmoins je peux changer la disposition de mes données sans problème.
Merci :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/06/2016 à 16:02
Bonjour,
1) discussion donc déplacée vers le sous-forum (VBA) où elle aurait dû être ouverte. Prends s'il te plait dorénavant ce soin toi-même.
2)
Enfin mes données "ville" et "région" sont stockées sous la forme : colonne A : toutes mes régions et colonnes B,C,D,... mes villes.

ne nous indique que très imprécisément comment elle sont réparties
Il est vraiment dommage que ces questions doivent t'être posées !
Si tu as des difficultés à exposer simplement et clairement les choses, mets ici une copie d'écran de la feuille concernant ces données.
Montre également (cela tendra à éclairer un peu) la propriété rowsource de ta combobox.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Juliettedrev Messages postés 5 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 1 juin 2016
1 juin 2016 à 16:14
J'ai refais ma base région/ville (région : colonne A et ville : colonne B) pour que ce soit plus clair, ci-dessous un screenshot :


Et voici la propriété :
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2016 à 16:18
ta propriété rowsource est "Magasins3!C2:C20"
1) La feuille objet de ta copie d'écran est-elle la feuille Mahsins3 ?
2) on n'y voit pas la plage c2:c20
0
Juliettedrev Messages postés 5 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 1 juin 2016
1 juin 2016 à 16:28
Oui c'est ça !


Ma RowSource renvoie à la colonne C où sont mes régions sans doublons.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/06/2016 à 17:00
Ah ...
Beaucoup de redondance en raison d'une réflexion insuffisante au moment de la conception :
Ouvre donc un classeur nouveau et :
en colonne A : A partir de la ligne 2, les régions, les unes sous les autres, à raison d'une seule par ligne
En regard, sur chaque ligne (des colonnes B à .... donc), les villes de chaque région.
Et ce code sur ton userform (avec une combobox et une listbox) :
Private Sub ComboBox1_Click()
deb = ComboBox1.ListIndex + 2
fin = Worksheets("Feuil1").Cells(deb, Columns.Count).End(xlToLeft).Column
For i = 2 To fin
ListBox1.AddItem Worksheets("Feuil1").Cells(deb, fin).Value
Next
End Sub

Private Sub UserForm_Activate()
Dim derlig As Long
derlig = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.RowSource = "Feuil1!A2:A" & derlig
End Sub

et voies ce que cela fait.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Juliettedrev Messages postés 5 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 1 juin 2016
Modifié par Juliettedrev le 1/06/2016 à 18:04
J'ai appliqué ce que tu proposes, ça ne donne pas tout à fait ce que je souhaite.
Déjà voici ma base : (feuille : "Feuil4")



Et voici mon code (peut-être que je n'ai pas bien adapté):

Private Sub ComboBox1_Click()
deb = ComboBox1.ListIndex + 2
fin = Worksheets("Feuil4").Cells(deb, Columns.Count).End(xlToLeft).Column
For i = 2 To fin
ListBox1.AddItem Worksheets("Feuil4").Cells(deb, fin).Value
Next
End Sub

Private Sub UserForm_Activate()
Dim derlig As Long
derlig = Worksheets("Feuil4").Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.RowSource = "Feuil4!A2:A" & derlig
End Sub


Quand je lance le code et que je choisis une région, ma Listbox affiche uniquement la dernière ville de ma région en plusieurs fois :


Merci
0
Juliettedrev Messages postés 5 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 1 juin 2016
1 juin 2016 à 18:05
Voici ce que ça donne :
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/06/2016 à 08:04
Ouais ...
Tu auraixs pu (si tu avais analysé, bein sûr, un peu ... !!!) corriger toi-même :
For i = 2 To fin
ListBox1.AddItem Worksheets("Feuil4").Cells(deb, i).Value
Next

!!!!
réveille-toi, s'il te plait. C'est toujours mieux que d'attendre la becquetée".
EDIT : et je ne te dis pas cela "au hasard", mais après avoir entendu bêler, pendant près d'une heure et demie, une brebis allaitée par une autre que sa mère (périe) et qui, s'étant endormie, s'est réveillée alors que tout le troupeau (dont la nourricière) s'était déplacé pendant don profond sommeil. Si l'on veut téter, il faut savoir au moins téter et déterminer quand et où téter.
Bon courage dans tes efforts (quand ils viendront).

Ah oui ... et n'oublie pas (puisqu'il faut tout de mettre à la bouche) de vider ( ListBox1.Clear ) ta listbox entre deux clics sur la combo, hein ...(cela va tellement de soi, mais ... bon ...

EDIT : et on peut même s'amuser à le faire sans aucune boucle du tout, ainsi, par exemple :
Dim ligne1 As Integer

Private Sub ComboBox1_Click()
ListBox1.Clear
Dim deb As Integer, fin As Integer
deb = ComboBox1.ListIndex + ligne1
fin = Worksheets("Feuil2").Cells(deb, Columns.Count).End(xlToLeft).Column
If fin = 2 Then ' cas d'une seule ville
ListBox1.AddItem Cells(deb, ligne1)
Else
ListBox1.List() = Application.Transpose(Range(Cells(deb, ligne1), Cells(deb, fin)))
End If
End Sub


Private Sub UserForm_Activate()
Dim derlig As Long
ligne1 = 2 'ligne à laquelle commencent tes régions
derlig = Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.RowSource = "Feuil2!A" & ligne1 & ":A" & derlig
End Sub

juste un peu plus compliqué à comprendre, mais efficace.



________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous