Liste déroulante à choix multiple dans Excel
Une macro gratuite à coller dans ta feuille pour garder plusieurs choix dans la même cellule, puis de quoi compter, filtrer et colorer ces choix.
Par défaut, une liste déroulante d’Excel ne garde qu’une valeur par cellule. Dans Microsoft 365, des cases à cocher réunies par JOINDRE.TEXTE donnent un résultat proche. Pour une vraie liste à choix multiple, nous te conseillons de copier-coller notre macro VBA, qui ajoute chaque choix aux précédents et retire celui que tu choisis une seconde fois.
Ce que fait la macro, en image
Dans le tableau de l’exemple, la colonne Équipes porte une liste déroulante ordinaire, et la macro est installée dans sa feuille. Après le choix d’Achats puis de Logistique, la cellule affiche « Achats, Logistique », et si tu choisis de nouveau Achats, il n’y reste que « Logistique ».

Chaque valeur choisie s’ajoute aux précédentes, dans la même cellule.
Une valeur choisie une seconde fois est retirée, et les autres gardent leur ordre.
La touche Suppr vide la cellule, comme d’habitude.
Seules les cellules de la plage réglée qui portent une liste déroulante sont concernées.
| A | B | |
|---|---|---|
| 1 | Tâche | Équipes |
| 2 | Relancer le fournisseur | Achats, Logistique |
| 3 | Préparer l'inventaire | Achats |
Étape 1, créer la liste déroulante de départ
La macro ne crée pas la liste, elle s’appuie sur une liste déroulante ordinaire, et si ta colonne en porte déjà une, tu peux passer directement à la macro, à l’étape 2. Sinon, tes options vont d’abord dans un tableau, sur un onglet à part, et la liste prend ensuite ses valeurs dans la colonne de ce tableau par une formule INDIRECT. Une option ajoutée au tableau entre ainsi dans la liste sans que tu rouvres la validation des données.
- 01
Sur un onglet à part, par exemple un onglet Listes, écris le titre Option, puis tes options en dessous, une par ligne.
- 02
Clique dans cette colonne, appuie sur Ctrl+L, vérifie que la case « Mon tableau comporte des en-têtes » est cochée, puis valide par OK.
- 03
Nomme ensuite le tableau Options dans la case Nom du tableau de l’onglet Création de tableau.
- 04
Sélectionne les cellules qui recevront les choix, par exemple B2:B200, puis clique sur le bouton Validation des données de l’onglet Données.
- 05
Dans la zone Autoriser, choisis Liste, puis tape la formule suivante dans la zone Source et valide par OK.
=INDIRECT("Options[Option]")Désigne la colonne Option du tableau Options, qui s’allonge avec lui. Si ton tableau ou sa colonne portent un autre nom, remplace-les entre les guillemets, et garde les guillemets.

Sélectionner les cellules du tableau dans Source marche aussi, mais seule la formule INDIRECT propose à chaque fois l’option ajoutée, en bas comme au milieu du tableau. Pour quelques options qui ne bougeront pas, tu peux enfin les taper directement dans Source, séparées par des points-virgules (Achats;Compta;Logistique), puisqu’avec des virgules, un Excel réglé en français n’en fait qu’une seule option. La fiche Liste déroulante du lexique détaille les autres réglages de la fenêtre, dont le message de saisie et l’alerte d’erreur.
Appliquer la liste à toute une colonne
Sélectionne toute la plage avant d’ouvrir la validation des données, par exemple B2:B1000. Partir de la ligne 2 laisse le titre de la colonne sans liste.
Si ton suivi est lui-même un tableau (Ctrl+L), sélectionne les cellules de sa colonne. Chaque ligne ajoutée au tableau reçoit alors la liste toute seule, et une liste déjà posée se recopie aussi avec la poignée de recopie. Dans les deux cas, la macro ne cumule pourtant les choix que dans B2:B200, tant que tu n’as pas écrit la plage de ta liste dans sa ligne PLAGE_LISTES, à l’étape 3.
Étape 2, coller la macro dans la feuille
Cette macro se colle dans le module de la feuille qui porte la liste, et non dans un module ordinaire. Ce module est le seul endroit d’où Excel la lance à chaque choix.
Fais un clic droit sur l’onglet de la feuille, choisis Visualiser le code, colle le code dans la page blanche qui s’ouvre, puis enregistre le classeur au format « Classeur Excel (prenant en charge les macros) ».
Pour vérifier l’installation, reviens sur la feuille et choisis deux valeurs dans la même cellule. La liste continue d’afficher toutes les options, même celles déjà retenues, et c’est la cellule qui les cumule.
Si la seconde valeur remplace la première, vérifie d’abord que les macros sont activées. À l’ouverture du classeur, clique sur le bouton Activer le contenu dans la barre jaune, comme l’explique l’article Activer les macros sur Excel sans casser la sécurité.
Étape 3, régler la plage et le séparateur
La plage et le séparateur se règlent dans deux lignes en tête du code, marquées À MODIFIER, où tu ne changes que la valeur après le signe égal. La plage peut d’ailleurs se trouver sur une feuille protégée, puisque la macro y marche tant que les cellules de la liste ne sont pas verrouillées.
PLAGE_LISTESLes cellules où la macro cumule les choix, "B2:B200" dans le code. Une cellule de cette plage sans liste déroulante reste ignorée.SEPARATEURCe qui sépare deux choix dans la cellule, ", " dans le code, soit une virgule suivie d’une espace.
Par exemple, ces deux lignes font travailler la macro sur C2:C500, avec un point-virgule entre deux choix.
Private Const PLAGE_LISTES As String = "C2:C500"Private Const SEPARATEUR As String = "; "
Plusieurs colonnes à choix multiples
Écris les plages à la suite, séparées par une virgule, à l’intérieur des mêmes guillemets. La macro cumule alors les choix dans chacune, ici les colonnes B et D.
Private Const PLAGE_LISTES As String = "B2:B200,D2:D200"
Une colonne entière s’écrit "B:B", la ligne de titre restant ignorée tant qu’elle ne porte pas de liste. Si ton suivi est un tableau, écris plutôt le nom de sa colonne, comme "Tableau1[Équipes]", et la macro suivra les lignes ajoutées.
Un choix par ligne dans la cellule
Pour afficher chaque choix sur sa propre ligne, remplace le séparateur par vbLf, sans guillemets. Excel active alors de lui-même le renvoi à la ligne de la cellule, et rechoisir une valeur la retire toujours.
Private Const SEPARATEUR As String = vbLf
Dans les formules de la partie « Exploiter une colonne à choix multiples », remplace alors leur séparateur (", " ou ",") par CAR(10). Celle qui compte les choix d’une cellule devient ainsi la suivante.
=SI(B2="";0;NBCAR(B2)-NBCAR(SUBSTITUE(B2;CAR(10);""))+1)Ajouter, retirer ou changer un choix
Un choix se retire de la cellule par la liste elle-même, comme il s’y est ajouté. Une option, elle, s’ajoute ou se renomme dans le tableau de l’onglet Listes, où la liste déroulante prend ses valeurs.
Pour retirer un choix d’une cellule, choisis-le de nouveau dans la liste. Les autres restent dans leur ordre.
Pour vider la cellule, appuie sur Suppr.
Pour ajouter une option à la liste, écris-la juste sous le tableau de l’onglet Listes. Le tableau s’agrandit, et la liste déroulante la propose aussitôt si sa source est la formule INDIRECT de l’étape 1.
Pour renommer une option, écris d’abord le nouveau nom sous le tableau, sans effacer l’ancien. Dans chaque cellule concernée, choisis l’ancien nom pour le retirer, puis le nouveau. Supprime enfin la ligne de l’ancien nom dans le tableau.
Évite Rechercher et remplacer (Ctrl+H) sur la colonne des choix tant que la macro est installée. Le remplacement la déclenche une fois par cellule modifiée, et comme elle annule le dernier geste pour relire l’ancien contenu, elle risque de mélanger l’ancien et le nouveau nom.
Si ta liste ne s’appuie pas encore sur un tableau, la fiche Tableau Excel montre comment en créer un, et l’étape 1 comment en faire la source de la liste avec la formule INDIRECT.
Exploiter une colonne à choix multiples
Une cellule qui affiche « Achats, Logistique » reste un texte, si bien que les formules et les outils qui l’exploitent y cherchent un choix ou la découpent sur le séparateur. Les exemples suivants partent de choix posés en B2:B200 avec le séparateur de la macro, une virgule suivie d’une espace. Avec un autre séparateur, comme "; ", remplace-le de la même façon dans les formules.
Compter les lignes qui contiennent un choix
=NB.SI(B2:B200;"*Achats*")Compte les cellules où Achats apparaît, seul ou avec d’autres choix.
Les astérisques de NB.SI acceptent n’importe quel texte avant et après le mot. C’est aussi leur limite, car ils trouvent Achats à l’intérieur d’une autre option, comme « Achats groupés », ou même « Rachats », puisque NB.SI ne distingue pas les majuscules des minuscules. Quand deux options se ressemblent ainsi, la formule suivante entoure chaque cellule et le choix cherché du séparateur, si bien que seul le choix entier est compté.
=SOMMEPROD(--ESTNUM(CHERCHE(", Achats, ";", "&B2:B200&", ")))Compte les cellules qui contiennent exactement le choix Achats.
Compter les choix d’une cellule
=SI(B2="";0;NBCAR(B2)-NBCAR(SUBSTITUE(B2;",";""))+1)Rend 2 pour « Achats, Logistique » et 0 pour une cellule vide.
La formule compte les virgules puis ajoute un, et se trompe donc dès qu’une option contient elle-même une virgule. Dans Microsoft 365, FRACTIONNER.TEXTE donne le même résultat en découpant la cellule. Le test de la cellule vide y reste nécessaire, sans quoi une cellule vide compte pour un choix.
=SI(B2="";0;NBVAL(FRACTIONNER.TEXTE(B2;", ")))Filtrer les lignes qui contiennent un choix
Le filtre textuel Contient garde les lignes dont la cellule contient le mot tapé, où qu’il se trouve dans le texte. Toutes celles où Achats fait partie des choix restent ainsi affichées.
- 01
Si les flèches de filtre ne sont pas déjà dans les titres, clique dans ton tableau, puis sur le bouton Filtrer de l’onglet Données.
- 02
Ouvre la flèche de la colonne des choix, choisis Filtres textuels, puis clique sur Contient.
- 03
Tape Achats et valide.
Ce filtre garde donc, comme les astérisques de NB.SI, les lignes où figure « Achats groupés ». Pour une liste filtrée qui se met à jour seule, FILTRE recopie ailleurs les lignes concernées, ici les colonnes A et B, avec le même défaut.
=FILTRE(A2:B200;ESTNUM(CHERCHE("Achats";B2:B200));"")Le dernier argument évite l’erreur #CALC! quand aucune ligne ne contient le choix. FILTRE n’existe pas dans les versions anciennes d’Excel, comme 2016 ou 2019.
Colorer une cellule selon un choix
Une mise en forme conditionnelle colore la cellule où un choix apparaît, avec la règle Texte qui contient, ou toute la ligne, avec une règle écrite en formule. Les deux règles cherchent le mot dans le texte de la cellule des choix, où elles trouvent Achats seul comme au milieu d’autres choix.
- 01
Sélectionne la colonne des choix, par exemple B2:B200.
- 02
Dans l’onglet Accueil, clique sur le bouton Mise en forme conditionnelle, choisis Règles de mise en surbrillance des cellules, puis Texte qui contient.
- 03
Tape Achats, choisis une couleur et valide.
Pour colorer la ligne entière, sélectionne les lignes du tableau à partir de la ligne 2, par exemple A2:F200. Clique ensuite sur le bouton Mise en forme conditionnelle, puis sur Nouvelle règle, choisis Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué, et écris la formule suivante.
=ESTNUM(CHERCHE("Achats";$B2))Choisis enfin une couleur avec le bouton Format, puis valide. Le dollar devant B garde la colonne des choix pour toutes les cellules de la ligne, qui se colorent ensemble.
Avec une règle par option, une cellule qui porte deux choix prend la couleur de la règle placée le plus haut dans la fenêtre Gérer les règles. La fiche Mise en forme conditionnelle montre comment changer cet ordre.
Répartir les choix en colonnes
=FRACTIONNER.TEXTE(B2;", ")Dans Microsoft 365, place chaque choix de B2 dans sa propre colonne, à partir de la cellule de la formule.
Pour mettre tous les choix de la colonne l’un sous l’autre, un par ligne, réunis-les d’abord avec JOINDRE.TEXTE, puis découpe le tout.
=FRACTIONNER.TEXTE(JOINDRE.TEXTE(", ";VRAI;B2:B200);;", ")Sans ces fonctions, l’outil Convertir de l’onglet Données fait le découpage une fois pour toutes. Choisis Délimité, puis, à l’étape suivante, coche seulement la case Virgule, et chaque choix après le premier garde l’espace qui suivait la virgule. Ne supprime pas cette espace en cochant aussi la case Espace, qui couperait en deux une option comme « Achats groupés ».
Sans macro, ce qui existe
La validation des données d’Excel n’a aucune option de choix multiple, et une liste déroulante sans macro garde toujours une seule valeur. Sans VBA, les choix vivent donc dans plusieurs cellules, qu’une formule réunit ensuite.
Des cases à cocher et JOINDRE.TEXTE
Chaque option reçoit sa colonne de cases à cocher, et une formule réunit, dans une dernière colonne, les titres des options cochées sur la ligne. Ces cases posées dans la cellule demandent une version à jour d’Excel pour Microsoft 365, comme l’explique la fiche Case à cocher.
- 01
Écris une option par colonne, en titre, par exemple Achats en C1, Compta en D1, Logistique en E1 et Ventes en F1.
- 02
Sélectionne les cellules sous ces titres, par exemple C2:F200, puis clique sur le bouton Case à cocher de l’onglet Insertion.

La case à cocher elle-même, posée dans la cellule. Ici, une case par tâche, alors que la méthode en pose une par option. - 03
En G2, écris la formule suivante, puis recopie-la vers le bas.
=JOINDRE.TEXTE(", ";VRAI;FILTRE($C$1:$F$1;C2:F2;""))Affiche « Achats, Logistique » quand ces deux cases sont cochées, et rien quand aucune ne l’est.
Une case cochée vaut VRAI et une case décochée vaut FAUX, ce que FILTRE lit directement. Sans son dernier argument, une ligne sans aucune case cochée afficherait #CALC!.
Une colonne par option
Sans cases à cocher, le même tableau marche avec un x tapé sous chaque option retenue. Seule change alors la condition de FILTRE, qui teste si chaque cellule de la ligne vaut x, là où les cases valaient déjà VRAI ou FAUX.
=JOINDRE.TEXTE(", ";VRAI;FILTRE($C$1:$F$1;C2:F2="x";""))Les deux méthodes partagent le même défaut, celui d’une colonne par option, si bien que chaque option ajoutée demande une colonne de plus au tableau et une formule élargie.
Dans Excel pour le web et Google Sheets
D’après l’aide de Microsoft, Excel pour le web ne permet ni de créer, ni d’exécuter, ni de modifier une macro VBA, mais il ouvre un classeur qui en contient. La macro n’y réagit donc pas, et la liste y garde un seul choix.
Dans Google Sheets, les macros s’écrivent en Apps Script, et Google propose un outil qui convertit le code VBA d’un fichier Excel en Apps Script, réservé aux offres Workspace Enterprise Plus et Education Plus. Cette page ne couvre pas Google Sheets.
Pour choisir plusieurs valeurs sans macro, l’aide de Google décrit une option Autoriser les sélections multiples dans les réglages d’un menu déroulant, réservée aux menus déroulants « au format de chip ». La même aide précise que, sur mobile, on ne peut pas choisir plusieurs valeurs, même quand la sélection multiple est activée. Cette page s’en tient à ce que décrit l’aide.
Pourquoi ce code est plus long que ceux des forums
Ce code est plus long d’abord parce qu’il évite deux erreurs que font beaucoup de codes qui circulent. Ces codes cherchent le choix dans la cellule avec la fonction InStr, puis le retirent avec Replace, alors qu’InStr trouve un texte à l’intérieur d’un autre. Avec eux, une cellule qui porte « Achats groupés » refuse le choix Achats, pris pour un doublon. Replace abîme de son côté une autre option, puisque choisir Achats dans une cellule qui porte « Compta, Achats groupés » y laisse « Compta groupés ».
Ce code, lui, compare chaque choix en entier, après avoir découpé la cellule sur le séparateur. Il ne touche par ailleurs qu’aux cellules qui portent une liste, laisse une cellule vidée par Suppr, et garde son type à une date ou un nombre choisi seul. Il se méfie enfin des dates, qu’Excel relit à l’américaine quand une macro les écrit sous forme de texte, le 1er février devenant le 2 janvier.
Ses limites
La macro ne vaut que pour la feuille où tu la colles. Pour une autre feuille, colle-la aussi dans le module de cette feuille.
Si le module de la feuille porte déjà une procédure Worksheet_Change ou Worksheet_SelectionChange, Excel refuse le code et affiche « Nom ambigu détecté ». Il faut alors réunir les deux procédures du même nom en une seule.
Ctrl+Z n’annule pas un choix fait avec la macro. Pour retirer une valeur, choisis-la de nouveau dans la liste.
La macro traite une cellule à la fois. Un collage ou une recopie sur plusieurs cellules remplace leur contenu, sans rien cumuler.
Une option qui contient le séparateur, une virgule suivie d’une espace par défaut, ne peut pas être retirée. La choisir de nouveau l’ajoute une seconde fois. Choisis alors un autre séparateur.
Une cellule qui réunit plusieurs choix ne respecte plus la validation des données. Avec l’alerte d’erreur par défaut, F2 puis Entrée sur cette cellule est refusé, et la commande Entourer les données non valides la signale.
Une date ou un nombre choisi seul garde son type. Dès que la cellule réunit plusieurs choix, elle devient un texte, que les calculs ne lisent plus comme une date ou un nombre. Une date restée seule après le retrait des autres choix reste le plus souvent en texte.
Le classeur doit être enregistré au format « Classeur Excel (prenant en charge les macros) », sinon le code disparaît à la fermeture.
Tu as peut-être encore une question
Crée d’abord une liste déroulante classique avec Données puis Validation des données, fais un clic droit sur l’onglet de la feuille, choisis Visualiser le code et colle la macro de cette page, qui ajoute chaque valeur choisie aux précédentes dans la même cellule et retire celle que tu choisis une seconde fois. Enregistre ensuite le classeur au format qui prend en charge les macros.
La validation des données n’accepte qu’une valeur par cellule, mais Excel pour Microsoft 365 s’en approche sans VBA avec une case à cocher par option et une formule JOINDRE.TEXTE qui réunit les options cochées dans une seule cellule, au prix d’une colonne de plus par option. La méthode est détaillée dans la partie « Sans macro, ce qui existe ».
Pour ajouter une option, écris-la juste sous le tableau qui porte la liste, et la liste déroulante la propose aussitôt si sa source est la formule INDIRECT de l’étape 1, sans rouvrir la validation des données ni toucher à la macro. Pour retirer un choix d’une cellule, choisis-le de nouveau dans la liste, et Suppr vide la cellule entière. Pour renommer une option, écris d’abord le nouveau nom sous le tableau, choisis dans chaque cellule l’ancien nom pour le retirer, puis le nouveau, et supprime enfin la ligne de l’ancien nom.
Sélectionne toute la plage avant d’ouvrir Données puis Validation des données, par exemple B2:B1000 pour laisser le titre sans liste, ou les cellules de la colonne d’un tableau Excel, dont chaque nouvelle ligne reçoit alors la liste toute seule, sans nouveau réglage. Règle ensuite la même plage dans la ligne PLAGE_LISTES de la macro.
Excel pour Mac devrait la faire tourner, puisqu’il exécute les macros VBA et qu’elle n’emploie rien de propre à Windows, alors qu’Excel pour le web ne permet pas d’exécuter une macro VBA et que Google Sheets écrit ses macros en Apps Script. Google propose, pour certaines offres Workspace, un outil qui convertit le code VBA en Apps Script, et son aide décrit une option Autoriser les sélections multiples dans ses menus déroulants, que cette page ne détaille pas.
Oui, avec une mise en forme conditionnelle Texte qui contient, que tu trouves dans Accueil, Mise en forme conditionnelle puis Règles de mise en surbrillance des cellules, et qui colore toute cellule où le choix apparaît, seul ou parmi d’autres, avec une règle par option si tu veux une couleur par équipe. La règle placée le plus haut l’emporte quand deux choix se rencontrent.
Pour aller plus loin
Tout ce dont tu as besoin pour faire tourner tes macros et progresser sur Excel se trouve ici.

Télécharge notre cours Excel complet en PDF
Télécharger
Ton cours Excel gratuit
3 chapitres pour apprendre les bases et découvrir l'automatisation.
Voir le cours
Entraîne-toi sur nos 63 exercices corrigés
S’entraîner
Les macros Excel et le VBA expliqués simplement
Lire le guide
Activer les macros quand Excel les bloque
Voir comment