Liste déroulante avec multi-sélection

La liste déroulante classique dans une feuille Excel est géniale, mais elle ne vous permet de sélectionner qu'une seule option parmi l'ensemble présenté. Parfois, c'est exactement ce que vous voulez, mais il y a des situations où l'utilisateur doit pouvoir choisir quelques éléments de la liste.

Examinons plusieurs implémentations typiques d'une telle liste à sélection multiple.

Option 1. Horizontale

L'utilisateur sélectionne un par un les éléments de la liste déroulante, et ils apparaissent à droite de la cellule en cours de modification, automatiquement répertoriés horizontalement :

Les listes déroulantes dans les cellules C2:C5 dans cet exemple sont créées de manière standard, c'est-à-dire

  1. sélectionner les cellules C2:C5
  2. onglet ou menu Données choisir une équipe Validation des données
  3. dans la fenêtre qui s'ouvre, sélectionnez une option Liste et spécifiez comme plage Identifier cellules avec données source pour la liste A1:A8

Ensuite, vous devez ajouter une macro au module de feuille, qui fera tout le travail principal, c'est-à-dire ajouter les valeurs sélectionnées à droite des cellules vertes. Pour cela, faites un clic droit sur l'onglet de la feuille avec les listes déroulantes et sélectionnez la commande Répertoire de. Collez le code suivant dans la fenêtre de l'éditeur Visual Basic qui s'ouvre :

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Si nécessaire, remplacez la plage sensible des listes déroulantes C2:C5 dans la deuxième ligne de ce code par la vôtre.

Option 2. Verticale

Identique à la version précédente, mais les nouvelles valeurs sélectionnées ne sont pas ajoutées à droite, mais en bas :

Cela se fait exactement de la même manière, mais le code de la macro du gestionnaire change légèrement :

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Encore une fois, si nécessaire, remplacez la plage sensible des listes déroulantes C2:F2 par la vôtre dans la deuxième ligne de ce code.

Option 3. Avec accumulation dans la même cellule

Dans cette option, l'accumulation se produit dans la même cellule où se trouve la liste déroulante. Les éléments sélectionnés sont séparés par un caractère quelconque (par exemple, une virgule) :

Les listes déroulantes dans les cellules vertes sont créées de manière tout à fait standard, comme dans les méthodes précédentes. Tout le travail est fait, encore une fois, par une macro dans le module feuille :

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Sous-titre de fin  

Si vous le souhaitez, vous pouvez remplacer le caractère séparateur (virgule) de la 9e ligne de code par le vôtre (par exemple, un espace ou un point-virgule).

  • Comment créer une liste déroulante simple dans une cellule de feuille Excel
  • Liste déroulante avec contenu
  • Liste déroulante avec les options manquantes ajoutées
  • Que sont les macros, comment les utiliser, où insérer le code de macro dans Visual Basic

Soyez sympa! Laissez un commentaire