Rendre la liste de choix de combobox dépendante d'une autre combo

Résolu
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006 - 25 juil. 2006 à 09:31
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006 - 25 juil. 2006 à 16:26
Salut,

J'aimerais savoir comment rendre la liste de choix disponible dans une combobox dépendante de la sélection d'une autre combobox (comme la fonction "indirect" sur excel). En fait, j'ai un suite de combobox sur une userform, et j'aimerais que le choix dans une combo conditionne la liste de la combo suivante. Si vous avez des idées, elles sont les bienvenues!

Merci d'avance
ep

23 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
25 juil. 2006 à 15:12
Si j'ai bien compris, tu es dans Excel, si tu n'as pas absolument besoin d'un formulaire, tu peux faire autrement (je trouve même ça plus joli personnellement, mais là, c'est une question de goût et de couleur :) )
Il ne faut pas avoir peur de la longueur, c'est très simple en fait :

Posons les bases :
Tu dois poser toutes tes données à plat, façon base de données un petit peu.
On va créer une feuille Données.
Dans la colonne A, on va mettre le contenu de ta ComboBox initiale :
A1 : Toto
A2 : Tata
Puis on crée une zone de nom : Menu Insertion\Nom\Définir
On sélectionne A1 et A2, et on appelle la zone Initiale, par ex.

On va faire la même chose pour le contenu de la combo dépendante :
Dans la colonne D, on va mettre le contenu de ta ComboBox dépendante pour le 1er choix de la Combo Initiale :
D1 : Mange
D2 : Boit
D3 : Travaille
On sélectionne D1, D2 et D3, et on appelle la zone Jour, par ex.
Dans la colonne E, on va mettre le contenu de ta ComboBox dépendante pour le 2ème choix de la Combo Initiale :
E1 : Dort
E2 : Ronfle
On sélectionne E1 et E2, et on appelle la zone Nuit, par ex.

L'ensemble de tes données sont prêtes.
Pour faciliter la suite (parce qu'on n'a pas forcément que 2 sous thèmes avec 3 données), je vais une table de corespondance avec ma colonne 1, c'est à dire que je vais attacher à chaque choix le nom de la zone de texte qui correpond :
A1 : Toto B1 : Jour
A2 : Tata B2 : Nuit
Et là encore, je crée une zone de Nom en sélectionnant cette fois A1 à B2.
Je vais l'appeler Noms.

Ca semble barbare comme ça, mais quand on est habitué, on se rend compte que c'est super simple et ça prend 1 minute chrono à faire.


Sur une 2ème feuille (que j'appelle Combo), on va crée ton interface :
Je vais attacher une zone de liste à la cellule (Menu Données\Validation ... Onglet Options, dans la combo Autoriser, choisir Liste et mettre en source =Initiale
Quand tu cliques dans la cellule A1, tu as donc une combo qui donne les choix Toto et Tata.
On fait la même chose en A2, sauf qu'en Source on marque cette fois : =Jour
Quand tu cliques sur A2, tu as donc les choix : Mange, Boit, Travaille

Là vient la subtilité : on va afficher automatiquement le nom de la Zone de nom correspondant au choix effectué (je mets une couleur blanche dessus pour que ça ne se voit pas après).
Dans la cellule B1, on va rentrer la formule suivante :
=RECHERCHEV(A1;Noms;2;FAUX)
Cette fonction lance une recherche dans ta zone de nom "Noms", et affiche le mot de la 2ème colonne, en face du mot sélectionné dans ta combo.
Donc, si en A1, tu sélectionnes Toto, en B1 tu auras Jour, et si tu sélectionnes Tata, en B1 tu auras Nuit.

Maintenant, la petite partie en code (on est obligé d'y passer un peu tout de même ^^) :
Tu crées un bouton VB, que j'ai appelé cmd_MàJ, et tu lui colles le code suivant :

Private Sub cmd_MàJ_Click()

Dim Temp as String
Temp = "=" & Worksheets("Combo").Range("B1").Value
Worksheets("Nomenclature").Range("A2").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Temp
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

Voilà, maintenant, tu n'as plus qu'à sélectionner dans la Cellule A1 ton mot, appuyer sur le bouton MàJ et à ce moment là, ta cellule A2 aura donc la liste équivalente.


L'avantage de cette méthode, c'est que ton code est écrit une fois pour toute : Tu peux rajouter autant de données que tu veux, etc, comme tout est géré par les zones de Nom, le code n'a plus besoin d'être modifié.
Moi ça me sert souvent parce que je développe des applis Excel pour les collègues et heureusement que je ne fais pas toute la maintenance ^^ Le VBA leur file des boutons, mais quelques fonctionnalités EXCEL, ils y arrivent encore :p
Un autre avantage, je trouve ça bien plus joli :p, et puis, tu peux utiliser toute la panoplie d'Excel, la mise en forme conditionnelle, etc ... sans t'embêter avec du code.

L'inconvénient, c'est que si tu voulais absolument un formulaire, tu ne l'as pas :p

Molenn
3
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
25 juil. 2006 à 09:43
Salut!
Tu peux remplir ta deuxime combo quand la premiere perd le focus. Je pense que c'est ca que tu recherche...

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 09:53
Désolé de faire le boulet, mais je suis un bleu en vb, et là, je comprend pas ta réponse...
En fait je cherche un moyen de remplir ma deuxième combo avec une liste excel portant le nom de la première. J'espère être assez clair, mais c'est pas le cas, hésite pas à me dire ce qui ne l'ai pas.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2006 à 10:12
Salut
Pensez au MOTEUR DE RECHERCHE car ceci est une question qui est déjà passée... Faut juste se donner la peine d'essayer de chercher. (bleu en vb ou pas...)

@+, Julien
Pensez: Règlement
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2006 à 10:16
Salut,

Si j'ai bien compris t'as un 1er ComboBox.
Dedans tu as une liste (logique).
Chaque Item de cette liste correspond au nom de tes listes dans excel ? (c'est là où je suis pas sûr)

Auquel cas :

Private Sub ComboBox1_Change()
   ComboBox2.RowSource = "FeuilX!" & ComboBox1.Text
End Sub

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
sondage


Merci de prendre le temps de lire
le Règlement CS


    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2006 à 10:17
Julien The Destructor !

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
sondage


Merci de prendre le temps de lire
le Règlement CS


    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 10:28
Désolé Julien!
Cette fois ci j'ai pas pensé...
La prochaine fois je ferais gaffe!
Merci les gars
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 10:31
Je reagrde si j'arrive à m'en sortir avec ça
0
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
25 juil. 2006 à 10:51
Je ne sais pas si j'ai bien saisi mais voilà un petit bout de code qui induit les choix d'un combo selon la sélection d'un premier.

Pour faire l'essai il suffit de créer un form et de mettre deux combo dessus (combo1, combo2) et copier-coller le code ci-dessous dans la partie code

Option Explicit


Private Sub Combo1_Click()
Combo2.Clear
Select Case Combo1.ItemData(Combo1.ListIndex)
Case 1
With Combo2
.AddItem "Chocolat"
.AddItem "Vanille"
.AddItem "Fraise"
End With
Case 2
With Combo2
.AddItem "Pistache"
.AddItem "Caramel"
.AddItem "citron"
End With
'Case ... si il y a plus que deux options dans combo1 on peut
' ajouter plus d'option ici.
End Select

End Sub

Private Sub Form_Load()
With Combo1
'On ajoute les options du premier combo
.AddItem "Premier choix"
'Pour faciliter la sélection on ajoute des index aux options
.ItemData(.NewIndex) = 1
.AddItem "Second choix"
.ItemData(.NewIndex) = 2
End With

End Sub

Bonne glaces.....
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 10:52
Encore un petit problème...
A quoi correspond feuilX ? J'ai essayé sans, et je n'ai que le premier élément de ma liste qui est disponible.
Je n'ai pas réussi à trouver les infos que je cherche sur le moteur de recherche...
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2006 à 10:54
"FeuilX" Correspond au nom d'une de tes feuilles....Vu que nous ne connaissons pas le nom de tes feuilles (Honte a nous) et bien on essaie de "formatter" en mettant un nom "STANDARD"

@+, Julien
Pensez: Règlement,Réponse Acceptée, Moteur de recherche
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2006 à 10:55
FeuilX c'est le nom de ta feuiile à mettre, celle où se trouve tes plages "nommées"

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
sondage


Merci de prendre le temps de lire
le Règlement CS


    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 10:57
Merci pour vos efforts,
En fait je pensait que ma plage de cellule nommée n'était attachée à aucune feuille... Je continue mes recherches...

Merci pluplu également
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2006 à 11:05
Bon prend une feuille dans excel.
Tu la nommes Liste
Ensuite mets-y les différentes listes qui doivent s'afficher dans ton 2eme ComboBox selon l'Item choisi dans le 1er ComboBox.

Une fois tes listes mises dans cette nouvelle feuille d'Excel, sélectionne la première, dans le croisement des entêtes de lignes et colonnes, tu as l'adresse des cellules, tu effaces cette adresse et tu mets à la place le nom de ton 1er Item qui doit aller dans ton 1er ComboBox.
Ainsi de suite

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
sondage


Merci de prendre le temps de lire
le Règlement CS


    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:07
Je n'arrive toujours pas a avoir l'intégralité de maliste, je n'ai que le premier élément...

Le code que j'ai, avec mes réf. est celui-ci :

Private Sub CbBxGroupe_Change()
CbBxSite.RowSource = "Imputations!" & CbBxGroupe.Text
End Sub
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:10
Merci Mortalino, mais en fait ça c'est déjà en place...
Comme j'ai beaucoup de données, ça me facilitait les manip jusqu'ici...
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:17
Une question, histoire d'être sûr : mes listes, dans le tableur excel, elles peuvent bien être en ligne ou en colonne? Pas que des colonnes?
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:24
Il semblerait que le problème vienne du fait que ma seconde liste est en fait une liset en ligne... Y-a-t'il une solution rapide, ou faut-il que je revoie l'architecture de mon programme?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2006 à 11:27
Lorsque tu sélectionnes cette liste en ligne, si le nom apparaît dans l'adresse des cellules, c'est bon.

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
sondage


Merci de prendre le temps de lire
le Règlement CS


    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
ep1073 Messages postés 23 Date d'inscription vendredi 16 juin 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:32
C'est pourtant bien le cas :
Quand je la sélectionne, le nom s'affiche bien, mais avec rowqource, je ne récupère que la première valeur
En revanche, quand je prend une liste colonne, ta méthode marche très bien!
Donc je pense que je vais remanier un peu mon code, hisoitre de les mettre en colonnes dans un nouvel onglet...
Merci pour ton aide en tous cas!
0
Rejoignez-nous