Rendre la liste de choix de combobox dépendante d'une autre combo [Résolu]

ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 09:31 - Dernière réponse : ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention
- 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
Afficher la suite 

Votre réponse

23 réponses

Meilleure réponse
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 25 juil. 2006 à 15:12
3
Merci
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

Merci Molenn 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Molenn
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 25 juil. 2006 à 09:43
0
Merci
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 
Commenter la réponse de tof008
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 09:53
0
Merci
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.
Commenter la réponse de ep1073
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 25 juil. 2006 à 10:12
0
Merci
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
Commenter la réponse de jrivet
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 25 juil. 2006 à 10:16
0
Merci
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
Commenter la réponse de mortalino
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 25 juil. 2006 à 10:17
0
Merci
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
Commenter la réponse de mortalino
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 10:28
0
Merci
Désolé Julien!
Cette fois ci j'ai pas pensé...
La prochaine fois je ferais gaffe!
Merci les gars
Commenter la réponse de ep1073
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 10:31
0
Merci
Je reagrde si j'arrive à m'en sortir avec ça
Commenter la réponse de ep1073
cs_pluplu 616 Messages postés mercredi 18 décembre 2002Date d'inscription 4 juillet 2012 Dernière intervention - 25 juil. 2006 à 10:51
0
Merci
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.....
Commenter la réponse de cs_pluplu
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 10:52
0
Merci
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...
Commenter la réponse de ep1073
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 25 juil. 2006 à 10:54
0
Merci
"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
Commenter la réponse de jrivet
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 25 juil. 2006 à 10:55
0
Merci
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
Commenter la réponse de mortalino
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 10:57
0
Merci
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
Commenter la réponse de ep1073
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 25 juil. 2006 à 11:05
0
Merci
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
Commenter la réponse de mortalino
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 11:07
0
Merci
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
Commenter la réponse de ep1073
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 11:10
0
Merci
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...
Commenter la réponse de ep1073
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 11:17
0
Merci
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?
Commenter la réponse de ep1073
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 11:24
0
Merci
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?
Commenter la réponse de ep1073
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 25 juil. 2006 à 11:27
0
Merci
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
Commenter la réponse de mortalino
ep1073 23 Messages postés vendredi 16 juin 2006Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 11:32
0
Merci
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!
Commenter la réponse de ep1073

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.