Menu

Excel - Liste déroulante conditionnelle [Résolu/Fermé]

- - Dernière réponse :  Vitcthor - 7 juil. 2016 à 12:04
Bonsoir,

Je voudrais arriver à créer sous Excel une liste déroulante dont le contenu affiché serait fonction de la valeur de la cellule d'avant (qui est elle-même une liste déroulante).

Pour être plus clair, j'ai une liste de services Liste_Services (Service 1, Service 2, Service n...) dans une cellule. Cette liste, je l'ai faite depuis le menu "Données / Validation". Je souhaiterais dans la cellule suivante qu'apparaisse une liste d'items qui correspondent au service sélectionné.

En gros, j'ai sur une feuille Excel (feuille A) le tableau suivant :

  |      A    |      B     |     C     |     D     |     E        
1 |           | Service 1  | Service 2 | Service 3 | Service n 
2 | Service 1 |  Item B2   |  Item C1  |  Item D1  | Item E1
3 | Service 2 |  Item B3   |  Item C2  |  Item D2  | Item E2 
4 | Service 3 |  Item B4   |  Item C3  |  Item D3  | Item E3
5 | Service n |  Item Bn   |  Item Cn  |  Item Dn  | Item En


Dans une autre feuille (feuille B), j'ai (de manière simplifiée) les cellules suivantes :

 Liste_Services | Liste_Item


Une fois le service sélectionné dans cette feuille, je souhaiterais que la liste Liste_Item s'affiche en fonction du choix effectué (c'est-à-dire en focntion de Liste_Services). Si je sélectionne le Service 2, je voudrais que seule la liste de services Service 2 (colonne C de la feuille A ) s'affiche.

Je ne sais pas trop comment faire à ce niveau. Les listes sont définies.

J'espère avoir exposé assez clairement le problème que j'ai pour que quelqu'un me dépatouille.

Un grand merci d'avance à celui ou celle (ne soyons pas sexiste) qui m'aidera à résoudre ce soucis.

Cordialement.
Afficher la suite 

20/39 réponses

Meilleure réponse
approuvée par Jean-François Pillou le 19 janv. 2019
53
Merci
Salut,

En fait, j'ai créé mes listes dans une feuille (Feuille_Liste), comme suit :

  |     A     |     B     |     C     |      D    |     E
1 | | Service 1 | Service 2 | Service 3 | Service n
2 | Service 1 | Symp. 1_1 | Symp. 2_1 | Symp. 3_1 | Symp. n_1
3 | Service 2 | Symp. 1_2 | Symp. 2_2 | Symp. 3_2 | Symp. n_2
4 | Service 3 | | Symp. 2_3 | Symp. 3_3 | Symp. n_3
5 | Service n | | Symp. 2_n | | Symp. n_n


J'ai ensuite nommé chaque liste :
- listeServices pour B1:E1
- ERR_liste1 pour B2:B3
- ERR_liste2 pour C2:C5
- ERR_liste3 pour D2:D4
- ERR_listen pour E2:E5

Dans ma feuille principale (Feuille1), dans la cellule où je voulais afficher ma première liste (E2 par exemple), j'ai créé une liste comme suit :
- menu Données / Validation ;
- dans la partie "autoriser", j'ai sélectionné "Liste" ;
- dans la partie "Source", j'ai mis la formule suivante : =listeServices puis OK.

Dans la cellule suivante F2 (cellule dont l'affichage dépend du choix de la cellule précédente), j'ai procédé comme suit :
- menu Données / Validation ;
- dans la partie "autoriser", j'ai positionné sur "Liste" ;
- dans la partie "Source", j'ai mis la formule suivante : =INDIRECT("ERR_"&(RECHERCHE(E2;listeServices)))

Et le tour est joué (si je n'ai rien oublié). Si tu as besoin de plus d'explication, ou d'aide, n'hésite pas ;-)

Cordialement

Dire « Merci » 53

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58748 internautes nous ont dit merci ce mois-ci

jujulacroix
Messages postés
2
Date d'inscription
lundi 17 février 2014
Dernière intervention
17 février 2014
> Arno -
> Arno -
Bonjour F1 ca corresponds a quoi? svp
Raymond PENTIER
Messages postés
48164
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
13 février 2019
15670 > achacheachache -
première touche de fonction en haut à gauche de ton clavier d'ordinateur
gfacro
Messages postés
1
Date d'inscription
jeudi 26 mai 2016
Dernière intervention
26 mai 2016
> achacheachache -
Euh non, je ne pense pas du tout. A mon avis, la question de Achacheachache est par rapport à la réponse d'Arno.

F1 : F -> 6° colonne, 1-> 1° ligne. Mais c'est une mauvaise information. Cyrilounet utilise deux cellules E2 (liste de choix du service) et F2 (liste du choix de l'item du service qui est dans E2). La source des données est donc fonction de E2 au lieu de F2 qui fait une référence circulaire. C'est E2 qu'il faut utiliser et non pas F1.

Plusieurs remarques par rapport aux messages de cyrilounet.
  • Il a du faire plusieurs essais et la colonne A de son tableau n'est pas utilisée et induit en erreur avec son contenu qui ressemble à des en-tête de ligne alors que ce n'est surement pas le cas. Je pense qu'à l'origine il a fait sa liste des services en vertical et qu'il ne l'a pas supprimé.

"J'ai ensuite nommé chaque liste : - listeServices pour B1:E1 " : les informations de la liste sont maintenant en horizontal afin de mieux voir en vertical, dessous, le contenu de chaque liste. La colonne A ne sert plus, elle peut être vide.
  • Les noms (plages nommées) ne peuvent pas avoir d'espace : le remplacer par "_" du coup la première liste déroulante devient service_1, ..., service_n
  • Ses entêtes de colonnes contiennent le mot service alors que les listes sont crées avec le mot liste : changer les noms des listes en ERR_service_1, ..., ERR_service_n (ainsi que le conseille Arno, la différence est que je met "_" à la place de l'espace et que lui le supprime.
  • Pour ceux qui sont joueurs, on peut utiliser une combinaison de decaler (qui permet de déplacer/retailler une plage), indirect, et de patience pour le mettre en place :

Pour ne pas s'embetter à passer en référence relative ou absolue de type R1C1, il faut transposer le tableau de départ : dans 'Feuille A'!A1, coller :

Service 1 Symp. 1_1 Symp. 1_2
Service 2 Symp. 2_1 Symp. 2_2 Symp. 2_3 Symp. 2_n
Service 3 Symp. 3_1 Symp. 3_2 Symp. 3_3
Service n Symp. n_1 Symp. n_2 Symp. n_3 Symp. n_n

Donner le nom premService à 'Feuille A'!A1. -> cellule de début du tableau à partir d'où on fait les offset/decaler.

Dans 'Feuille B'!E2, mettre une validation des données par liste avec comme source : =DECALER(premService;0;0;NBVAL($A:$A);1)

Dans 'Feuille B'!F2, mettre une validation des données par liste avec comme source : =DECALER(premService;EQUIV($E$2;'Feuille A'!$A:$A)-1;1;1;NBVAL(INDIRECT("'Feuille A'!" & EQUIV($E$2;'Feuille A'!$A:$A)&":"&EQUIV($E$2;'Feuille A'!$A:$A)))-1)

ce qui revient à dire décaler(premService; nb ligne en dessous; nb colonne à droite = 1 pour ne pas avoir "service ..." dans la liste déroulante et n'avoir que les items; hauteur = 1 = le décaler doit nous retourner une plage sur une seule ligne;largeur = nombre d'items dans la ligne retournée)

EQUIV($E$2;'Feuille A'!$A:$A)-1 est ce qui nous donne la position dans la colonne A du service choisi en E2, -1 car on est dans un décalage, qui varie de 0 (pour rester sur place) à NBVAl - 1 pour aller en dernière position. Equiv nous donne le numéro de ligne dans la colonne, il faut enlever 1 pour avoir un décalage par rapport à la cellule de référence.

NBVAL(INDIRECT("'Feuille A'!" & EQUIV($E$2;'Feuille A'!$A:$A)&":"&EQUIV($E$2;'Feuille A'!$A:$A)))-1 pour connaitre le nombre d'item qu'il y a pour ce service (-1 pour ne pas avoir le nom du service).
-> EQUIV($E$2;'Feuille A'!$A:$A) pour avoir le numero de la ligne du service et ce coup ci on ne fait pas -1 car c'est bien le numéro de ligne qu'on veut, pas le décalage. on fait indirect(noligne & ":" & noligne) pour avoir la ligne en entier
Bonjour,

Ce qu'à fait Cyrilounet fonctionne très bien, le seul problème c'est la formule de la deuxième validation de donnée, après avoir appliqué son cas, la deuxième liste fonctionne comme attendu uniquement si on remplace F2 par E2 dans INDIRECT("ERR_"&(RECHERCHE(F2;listeServices))).

En espérant vous éclaircir !

EDIT : je viens de le corriger dans le message de Cyrilounet

Bien cordialement,
Victor
52
Merci
Bon, j'ai trouvé une solution qui consiste à afficher une liste dite dynamique en fonction du service sélectionné :-)

Si ça tente quelqu'un, n'hésitez pas.

Bonne continuation
Bonjour,
J'aimerais que tu m'apprennes comment tu as fait car je suis face au même problème.
Merci
moi ca m'intéresse ton truc de liste !

je dois choisir une marque de voiture et ensuite avoir un choix entre plusieurs modèles !
Merci Cyrilounet
J'ai testé ta solution et je suis enchanté... merci d'avoir partagé
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
4
Merci
bonjour Celine
http://cjoint.com/?hgqp3FU7Uv

michel
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 -
bonjour,

pas compris la question
au besoin, mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
Merci de ton aide.
http://www.cijoint.fr/cjlink.php?file=cj201106/cij2o84QGr.xls
J'espère que le petit texte est clair...
Sinon je resterais avec les fautes... Ma mère ne m'en voudra pas !!
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 -
Bis:
faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
Merci
http://www.cijoint.fr/cjlink.php?file=cj201106/cij6u4hi0V.xls
J'ai pas l'impression que c'est mieux... J'comprends pas...

Désolé
merci pour le fichier modèle nickel, j'ai enfin réussi à faire ce que je souhaitais...
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
3
Merci
A tout hasard, je signale que le tuto existe dans "astuces" de ce site...
Salut
Oui c'est vrai il existe un tuto sur les listes déroulantes avec saisie automatique. je m'en suis servi.
Mais je ne vois rien sur la liste déroulante conditionnelle.
si tu as des pistes. Merci.
Pour le moment je reprends les formules pas à pas pour voir où çà coince...
C'est long ...
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
2
Merci
Bonjour,

Ci joint liste en cascade avec 2 validations
http://cjoint.com/?fus33qE7Ds

liste cascade avec 1 seule validation (solution par VBA)
http://cjoint.com/?fus5ZEpkXy

les données-validation de données évitent d'avoir à gérer des erreurs dans les formules

pour la fonction INDIRECT (fonction "magique" d'Excel) regarde l'aide

Bonne soirée

Michel
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 > matiliana -
Bonjour,
http://cjoint.com/?dqlmES271S
cordialement,
Michel
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 > michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
-
ENCORE UNE FOIS, aucun coucou de remerciement...

c'était donc la dernière fois que je mettais en ligne ce classeur
mm si le message original ne m'etait pas destiné,
merci Michel!
Merci pour le fichier , j'y ai trouvé la solution à mon pb
Raymond PENTIER
Messages postés
48164
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
13 février 2019
15670 -
tu voulais dire "le même problème" ?
c'est pour qu'on soit bien d'accord sur la traduction de ton SMS ...
2
Merci
Bonjour à tous,

Depuis mon PC professionnel, je ne peux pas accéder aux liens, donc je ne peux lire les solutions aux problèmes.
Je suis moi-même confronté à ce souci de faire s'enchaîoner des listes déroulantes selon la cellule précédente, qui est elle-même issue d'une liste déroulante.
Serait-il possible qu'une personne qui a un fichier dans lequel ce qui est un souci pour moi fonctionne me l'envoie SVP?
Si possible sans passer par du code VBA mais par des formules classiques... Je ne maîtrise pas le code :-(

Mon adresse e-mail: d.cantaloube@aliceadsl.fr

D'avance merci beaucoup pour votre aide !

David
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 -
Bonjour,

Ne jamais indiquer son adresse de courriel sur un forum public !!!

tu pourras télécharger chez toi cette "boite à listes"
http://cjoint.com/?3GziXKQYhfz
1
Merci
BONJOUR,
j'ai un petit souci :
j'ai une base de donnée client sur excel? J'ai enregistré les clients qui achete et renouvelle des abonnements. Mais le souci c'est que quand le client renouvelle son abo, il apparait plusieur fois dans la base de donnée. Mais je ne veu pas le supprimer car je dois garder les dates de debut et de fin de son abonement. Comment je peu faire pour garder son nom 1 fois sur une seule ligne , et faire apparaitre ses dates d'abonement. Moi j'avait pensé a une liste deroulante qui fairait paparaitre ttes les infos du client. Mais est ce possible??????J'espere que j'ai bien expliqué le problème.
J'eseper que quelqu'un poura m'aider!
merci!
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
1
Merci
Okay, je pensais a la "non-vba"

Je ne sais pas (c'est un vieux truc de mon grenier) il faut que je regarde la b^te, mais certainement at home, ce soir ou ce WE.

Michel
Bonjour je relance le sujet afin de savoir s'il vous serai possible de remettre a jour le lien de votre boite a liste.

Merci d'avance
michel_m
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604 -
Voila, voila..

http://cjoint.com/?3LkrKLp84RB


en espérant que...
1
Merci
Bonjour, j'ai un peu le même souci, si quelqu'un pourrait m'aider, j'ai le fichier si vous voulez (voire résoudre de vous même ^^);
en fait mon opération consiste à appeler une référence de casque en liste déroulante (ou validation peu importe) et à partir de là, avoir dans une autre liste déroulante (ou validation) les accessoires disponibles pour la référence...
Please help me j'en peux plus
merci d'avance
1
Merci
Bonjour,
Je me trouve confronté au même problème que cyrilouet il y a quelques mois et aie donc suivi votre échange de mails. Celà dit je ne peux ouvrir depuis mon poste professionnel les liens. J'aie également été voir les astuces mais n'aie pas trouvé la solution à mon problème. Serait-ce possible de recevoir le classeur crée par Claben par mail?
Par avance, merci
Lorelei
1
Merci
Bonjour tout le monde,
Je suis actuellement en train de travailler (moi aussi) sur les listes deroulantes conditiionnelles et me voila confronté à un petit problème qui peut être, pour vous, n´en est pas un.
Autrement dit, ma question est peut être bête : Comment hiérachiser les données contenues dans une liste déroulante conditionnelle sans avoir à ordonner les données sources ?
Autre question : comment faire en sorte de ne pas faire apparaìtre dans cette liste deroulante, les cellules vides contenues dans la liste de données sources ?
J´apprécierai recevoir une réponses...Je vous remercie.
1
Merci
salut tout le monde
il me parrait que vous avez bien resolut ce problem et a mon tour j'aimerai bien savoir la solution mais j'arrive pas a ouvrir les liens du tutoriel envoyer par michel , comment je peux les voir?
merci






BE YOURSELF THERE IS ENOUGH OTHER
1
Merci
bonjour a tous
merci michel pour votre repond super rapide:)
mais malheureusement j'arrive pas a resolut mon problem en plus j'en ai un tres grand nombre de data est ce qu'il y a la solution en VBA ?

Merci d'avance
1
Merci
bonjour désoler de vouloir encore ce fichier mais j'aimerais profiter de la solution et la date à expirer pouvez-vous le remettre à jour merci
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
322
0
Merci
Bonjour

voici un fichier un peu different n'aimant pas mettre des formules dans une liste de validation, je les mets dans les noms de plage

un nom de plage : Marques, avec une formule de gestion de liste evolutive (tu peux ajourter les parques que tu veux
un nom de plage : Types, avec une formule de plage Glissante et evolutive (tu peux creer le nombre de type que tu veux) : Glissant : le plage se deplace en fonction de la valeur mise en C6

voici le lien : Lien Cjoint.com
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
322
0
Merci
re:

je crois que j'ai un probleme avec le lien, je ne sais pas fare lol
http://cjoint.com/?ivsK7lCMRV

Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
0
Merci
Bonjour,

Les liens ont une validité de 21 jours sur Cjoint.com....

ci joint demo d'une liste en cascade
http://cjoint.com/?krp4m6bPoZ
Merci Michel pour votre réponse rapide.

C'est un exemple intéressant et qui montre bien l'utilité de la fonction "INDIRECT".

Cependant, j'ai un nouveau problème suite à votre exemple et dont la solution correspondrait certainement à ce que je cherche à résoudre, sans réussite jusqu'à présent, je dois bien l'avouer.

J'aimerai ajouter une "cascade" supplémentaire. C'est-à-dire qu'il me faudrait créer une troisième liste (liste3) qui s'adapte à la réponse d'une deuxième liste (liste2) qui est elle-même fonction d'une première liste (liste1). Voilà, pour les grandes lignes.

Voici mon problème:
- Cette liste3 fait partie d'un tableau dynamique, j'entends par là que je lui ai donné un nom à l'aide de la fonction DECALER.
- Et son nom est composé de la réponse à la deuxième liste et d'un texte (exemple: pour un choix dans la liste2="crudités", le nom de la liste3 serait "Typ_crudités")

DANS CE CAS, je n'arrive plus à utiliser la fonction INDIRECT pour définir la liste (dans Données/Validation) et j'ai le message d'erreur suivant : "La source est reconnu comme erroné. Voulez-vous continuer?" (ps: les deux fautes d'ortographe sont dans Excel)

Autre question : dans l'exemple, la réponse est liée à une cellule. Comment faire pour que les listes s'étendent à plusieurs cellules, par exemple en colonneA -->liste1 , colonneB -->liste2 , colonneC-->liste3

Je joins le lien vers le fichier modifié qui contient le problème (ou l'erreur) en espérant que quelqu'un pourra me donner une réponse. Désolé mais vous devrez faire un copier/coller de cette adresse dans votre navigateur. je n'ai pas trouvé rapidement comment faire autrement.

http://cjoint.com/?krrHvSAxBX

Merci de votre aide à tous,
Stéphane
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
0
Merci
re,

je sature ce soir!!!

Je t'envoie un truc avec 2 cascades que j'avais bidouillé pour le forum CCM. Regarde si des procédés t'intéressent (il y a décomposition des formules pour répondre à la curiosité du demandeur)
http://cjoint.com/?krr1xHyN0S
Messages postés
5
Date d'inscription
jeudi 4 décembre 2008
Dernière intervention
5 décembre 2008
0
Merci
Bonjour

Debutant en VBA ,j'ai un probléme
je souhaite faire une liste déroulante dans une cellule mais qui renvoie une valeur numérique en fonction de la réponse choisie :
ex : liste déroulante motA motB motC qui m'affiche dans la même cellule : 1 si on choisit mot1, 2 si on choisit mot 2 et 3 si on choisit mot3

merci pour votre aide
Messages postés
15669
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 février 2019
3604
0
Merci
Bonjour Fravai,

Ta question a une caractéristique: ELLE EST FLOUE

S'agit il de liste à validation de données qui le thème de ce post, alors il n'y a pas besoin de VBA...., une fonction EQUIV suffit (regarde l'aide)

Sinon s'il s'agit de liste déroulante de la barre d'outils formulaire ou du combobox de la barre "contrôle" , encore faut-il le préciser, relance un autre post au besoin dans le forum programmation.
Si tu débutes en VBA, consultes ce site très pédagogique et décontracté:
www.info-3000.com
mais il vaut mieux bien connaitre les formules et fonctions Excel majeures (comme la combinaison index-equiv, Decaler, sommeprod, indirect, les formules matricielles...) avant de te lancer dans VBA