Créer une liste déroulante avec sélection multiple

Bonjour,

J'ai également un beau fichier avec listes déroulantes à choix multiples, mais je voudrai qu'elles se transforment (presque par magie) en listes déroulantes à choix multiples et avec sélections multiples.

Aujourd'hui j'ai le choix entre A, B ou C

Demain j'aimerai pouvoir choisir A et C ou B ou A et B etc.

J'aimerai faire ces modifications sur les colonnes D et E de l'onglet liste, les valeurs étant dans l'onglet Paramètre.

Dites moi si je suis clair !

Merci d'avance et bonne soirée

Bonjour,

Commençons par une petite clarification de langage : choix multiples ou sélections multiples, c'est la même chose ! Actuellement tu n'as aucune possibilité de choix multiples, tu ne peux faire qu'un seul choix, lequel remplace le choix précédent s'il y a lieu, mais ne se cumule pas avec.

Cela va de soit dans la mesure où un dispositif de liste déroulante à choix multiples implique l'utilisation de VBA et que ton classeur ne contient aucune macro.

Par ailleurs, ta deuxième liste laisserait penser que les items qu'elle contient ont un lien avec l'un des choix de la première liste, ce qui impliquerait que selon le premier choix, le choix de la deuxième liste devrait être limité à certains des items (soit un dispositif de listes-cascade)... Il conviendrait d'élucider ce point.

Cordialement.

Bonjour MFerrand

C'est exactement mon problème.

Je n'irai pas jusqu'à avoir besoin de limiter le choix de la 2ème liste pour le moment. Le simple fait de pouvoir sélectionner plusieurs items me rendrait déjà un grand service.

Bonne journée.

Bonsoir,

Je suppose que tu as vu le principe sur lequel repose l'insertion de sélections multiples à partir d'une liste déroulante.

La sélection faite, on la récupère et on annule l'opération, pour récupérer l'existant antérieur dans la cellule. On y ajoute la nouvelle sélection et on y remet le tout.

En sophistiquant, juste un tout petit peu plus, on peut pour une sélection déjà existante, si elle est faite une seconde fois la retirer... Ce qui permet à l'utilisateur de rectifier une fausse sélection sans avoir à effacer la cellule, ou évenutellement d'opérer un reclassement de ses sélections successives.

Je voudrais toutefois revenir sur un point. La première liste ne comporte que 3 items : Applicatif, Technique, Activités transverses. Les 2 premiers semblaient être en lien chacun avec un groupe d'items de la 2e liste, ce qui laissait penser à des listes-cascades. Si effectivement le 1er choix doit avoir un impact sur le second, il serait dommage de l'abandonner. Cela n'empêche par de réaliser la sélection multiple mais il vaut mieux tout faire que d'avoir à reprendre ensuite.

Cordialement.

Bonjour MFerrand,

Effectivement le fait de pouvoir déselectionner sans avoir à effacer la cellule serait fortement appréciable.

En ce qui concerne le 2nd point, les listes-cascades seraient également très utile. En revanche pour l'un des items, les choix de la 2nde liste ne sont pas encore figés. Je te redonnerai le fichier une fois complété.

Ce qui m'amène à un 3ème point. Comment s'assurer que le fichier soit maintenable ? Je veux dire par là que si l'on ajoute ou supprime un item, il faudrait que le fichier puisse continuer à fonctionner sans avoir à recommencer l'opération.

Bonne journée

J'aurais préféré qu'on règle les cascade éventuelles avant... On va essayer de préserver les possibilités d'adaptation.

1er aménagement : la feuille Paramètre :

- En A la liste Type de patrimoine, nommée tPatri en dynamique :

=DECALER(Paramètre!$A$2;;;NBVAL(Paramètre!$A:$A)-1)

Elle n'évoluera peut-être pas, mais dans le doute, faisons comme si...

- En D la liste Patrimoine concerné, nommée Patri en dynamique :

=DECALER(Paramètre!$D$1;;;NBVAL(Paramètre!$D:$D)-1)

La colonne C est réservée pour placer le choix 1re liste auquel est rattaché l'élément Patrimoine, dans le cas de listes-cascade.

Dans l'immédiat, les deux noms alimentent les listes de façon classique. Si passage en cascade, le second nom sera remplacé par une formule ne renvoyant qu'une partie de la liste en fonction du 1er choix (la formule sera placée directement en validation, ou sera nommée et le nom en validation, c'est équivalent...) D'autres aspects seront à régler (effacements en cas de modification du choix antérieur, tri de la liste) : à voir le moment venu.

Les listes peuvent être allongées, les noms suivront.

La sélection multiple est mise en place par une procédure Change de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tx$, ntx$
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Me.Columns("D:E").SpecialCells(xlCellTypeAllValidation)) _
     Is Nothing Then
        ntx = Target
        If ntx = "" Then Exit Sub
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Undo
        tx = Target
        If InStr(1, tx, ntx) > 0 Then
            If InStr(1, tx, Chr(10)) > 0 Then
                tx = Replace(tx, ntx, "@")
                tx = Replace(tx, Chr(10) & "@", "")
                tx = Replace(tx, "@" & Chr(10), "")
            Else
                tx = ""
            End If
        Else
            If tx <> "" Then
                tx = tx & Chr(10) & ntx
            Else
                tx = ntx
            End If
        End If
        Target = tx
        Application.EnableEvents = True
    End If
End Sub

Particularités à noter :

  • une modification impactant plusieurs cellules n'est évidemment pas prise en compte ;
  • la prise en compte se fait par ailleurs sur le caractère sous validation de la cellule en colonnes D ou E, si on étend la zone sous validation, les nouvelles cellules incluses seront automatiquement prises en compte ;
  • l'effacement de la cellule est un choix valide de l'utilisateur, qui sera alors conservé ;
  • toute sélection dans la liste sera incorporée au contenu de la cellule si elle n'y figure pas déjà, les items étant séparés par un caractère de saut de ligne (Chr(10)) ;
  • la sélection d'un item figurant déjà dans la cellule entraîne sa suppression.

Cordialement.

Merci pour cette réponse rapide et complète.

Le fichier joint comporte bien les macros, mais pourtant impossible de sélectionner plusieurs valeurs.

J'ai sûrement raté une explication de ton message, mais malheureusement c'est la première fois que j'exploite des macros, mieux vaux tard que jamais...

Merci beaucoup pour ton temps

Vérification sur le fichier retourné sur le site : ça fonctionne !

Il faut activer les macros...

Une petite erreur à rectifier dans la formule qui définit la plage Patri :

=DECALER(Paramètre!$D$1;;;NBVAL(Paramètre!$D:$D)-1)

Remplacer $D$1 par $D$2 :

=DECALER(Paramètre!$D$2;;;NBVAL(Paramètre!$D:$D)-1)

Cordialement.

Pourtant elles sont bien activées ...

macros activees

me semblait-il. Y-a-t-il une autre manip à effectuer ?

Au temps pour moi, j'ai redémarré Excel et ça fonctionne... Magnifique !

Il me reste à réussir à modifier la formule qui définit la plage Patri. Que dois-je sélectionner afin d'effectuer cette modification ?

Tu la cherches dans le gestionnaire de noms.

Parfait, modification faite.

Histoire de complexifier encore un peu la chose, j'aimerai pouvoir afficher une liste de cases à cocher lorsque l'on clique sur la cellule, pour avoir les choix directement visibles, au lieu de la liste déroulante.

Pas sûr que je sois très clair, donc je te joins un fichier qui illustre mon propos.

406copie-de-test-002.zip (41.10 Ko)

S'il est possible d'utiliser cette fonction, ce serait encore mieux !

Je te joins également le fichier de base avec la modification sur la formule.

Merci beaucoup et bonne journée !

Il faudrait éviter de changer d'avis comme de chemise... !

Je n'ai pas vocation à réparer tous les codes plus ou moins défectueux que tu trouves...

Je me permets de te faire remarquer que ton code :

  • ne reprend pas l'intégralité du contenu déjà existant dans la cellule,
  • esquinte d'emblée ce contenu s'il y a plus d'un item,
  • met systématiquement une virgule de séparation, même si le choix est unique,
  • ne permet pas de redéfinir l'ordre des items insérés dans la cellule.

Tu m'expliqueras donc où est le progrès !

Et cela n'entre pas dans l'orientation arrêtée a départ.

Cordialement.

Bonjour MFerrand,

N'ayant pas découvert cette possibilité auparavant, je me suis permis de te la présenter. Mon absence de connaissance en VBA ne m'aide pas à juger de l'écart de code qu'il peut y avoir entre ce que tu as proposé et ce que j'ai découvert.

Je précise que la seule fonction intéressante dans le fichier que je t'ai partagé concerne le fait d'afficher automatiquement les choix à sélectionner lorsque l'on clique sur la cellule.

Ceci étant dit, si l'ajout de cette fonctionnalité entraîne des modifications trop lourdes, il est clair qu'il faudra l'oublier ...

Je sais parfaitement qu'en utilisant une ListBox, on va afficher la liste des choix ! C'est pour cela qu'on choisit en général d'utiliser ce contrôle...

J'ai fait 4 remarques à propos de ce dispositif, que tu aurais pu constater toi-même au départ, dont les 2 premières résultent du caractère inachevé ou mal goupillé ou esquinté après coup du code, mais qui en l'état le rend dysfonctionnel. La 3e était pour souligner un défaut montrant qu'on aurait pu apporter plus de soin à la finition... Quant à la 4e, elle visait à faire valoir un des avantages de la méthode liste déroulante qui permet de choisir l'ordre, ce que ne permet pas spontanément la zone de liste...

Ceci étant, les dispositifs permettant de choisir dans une liste sont tous connus au départ : liste déroulante classique dans la cellule, contrôles ComboBox ou ListBox, ou leurs équivalents Zone de liste déroulante et Zone de liste, et sans oublier l'utilisation éventuelle de Userforms... Et c'est au départ qu'on fait le choix du dispositif qui paraît le mieux adapté à ce qu'on cherche. Chacun a ses avantages et ses inconvénients, à l'intéressé de peser le pour et le contre... et d'opter. Quant à moi ! si je suis d'accord pour répondre à une question et contruire une procédure qui fasse ce qu'on recherche, ce n'est pas pour réaliser toutes les procédures de tous les dispositifs possibles avec leurs variantes !

Cordialement.

Rechercher des sujets similaires à "creer liste deroulante selection multiple"