Actualisation Listbox en fonction du contenu d'une ComboBox

- 31 mai 2016 à 17:05 - Dernière réponse :
Messages postés
18039
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 !
Afficher la suite 

Votre réponse

11 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 31/05/2016 à 17:12
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
22
Date d'inscription
lundi 24 septembre 2007
Dernière intervention
2 janvier 2018
- Modifié par bilbo50 le 31/05/2016 à 17:16
0
Merci
Bonjour

Tu fais cela sur Excel ?

 BILBO50
Commenter la réponse de bilbo50
Messages postés
5
Date d'inscription
mardi 31 mai 2016
Dernière intervention
1 juin 2016
- 1 juin 2016 à 15:15
0
Merci
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 :)
Commenter la réponse de Juliettedrev
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 1/06/2016 à 16:02
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
5
Date d'inscription
mardi 31 mai 2016
Dernière intervention
1 juin 2016
- 1 juin 2016 à 16:14
0
Merci
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é :
Commenter la réponse de Juliettedrev
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 1 juin 2016 à 16:18
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
5
Date d'inscription
mardi 31 mai 2016
Dernière intervention
1 juin 2016
- 1 juin 2016 à 16:28
0
Merci
Oui c'est ça !


Ma RowSource renvoie à la colonne C où sont mes régions sans doublons.
Commenter la réponse de Juliettedrev
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 1/06/2016 à 17:00
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
5
Date d'inscription
mardi 31 mai 2016
Dernière intervention
1 juin 2016
- Modifié par Juliettedrev le 1/06/2016 à 18:04
0
Merci
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
Commenter la réponse de Juliettedrev
Messages postés
5
Date d'inscription
mardi 31 mai 2016
Dernière intervention
1 juin 2016
- 1 juin 2016 à 18:05
0
Merci
Voici ce que ça donne :
Commenter la réponse de Juliettedrev
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 2/06/2016 à 08:04
0
Merci
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.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.