Liste déroulante à choix multiples
Bonjour à tous,
Est ce qu'il est possible d'obtenir de l'aide pour créer une liste déroulante à choix multiples ? Je m'explique : je souhaiterais que lorsque la liste s'affiche, pouvoir sélectionner plusieurs choix, et que chacun d'entre eux s'affiche dans la cellule selectionnée.
Je suis novice concernant Excel et surtout très nulle !!
Je mets en piece jointe le fichier que j'ai commencé à créer et sur lequel j'aurais besoin de cette fonctionnalité. Je n'aurai besoin de cette liste a choix multiples que pour les colonnes V et W.
Merci d'avance,
cordialement,
Mag
Bonjour,
Ton fichier ne contenant rien est déjà particulièrement lent ! Cela parce que tu l'as affublé d'un tableau qui occupe la totalité de la feuille.
Commence par régler ça pour ne pas avoir très vite un classeur inexploitable. Tu détruis irrémédiablement cette feuille. Tu fais ton tableau avec le nombre de colonnes qui te convient et tu n'étends pas un tableau Excel si tu conserves ce mode de travail au-delà des lignes occupées...
Cordialement.
Bonjour et merci de votre réponse rapide,
En effet je vois bien que ce fichier rame, comme je vous l'ai dit je ne maitrise pas du tout Excel et je ne vois pas comment faire pour limiter mon tableau... (je souhaite rajouter une ou deux dernières colonnes a ce tableau)
Ca ne doit pas être difficile mais pourriez vous m'indiquer la marche à suivre ?
Merci
Il fait déjà 16 384 colonnes et 1 048 576 lignes !!! Tu ne peux rien rajouter ! Tu détruis cette feuille ou tu changes même de classeur...
Voici la version (normalement) allégée de mon tableau...
C'est bon mais je ne vois pas tes listes.
Ce que je cherche à lister c'est ce qu'il y a dans la ligne "codage" (ligne 2) des colonnes V et W.
Bonjour,
Qui peut le plus.... peut le moins
Regarde ce que j'ai fait en ligne3 (A recopier vers le bas).
J'ai utilisé la validation des données - Liste - Et j'ai mis les options ( séparées pard des ";").
Pour une mise à jour et des modifications éventuelles plus faciles il serait bon de créer des tables sur une autre feuille du classeur et dans le champ "liste" de la validation de mettre "=NomDeLaTable"
J'ai aussi mis des validations de données sur d'autres champs, et limiter certaines saisies pour n'avois que des dates, des heures des nombres entiers, ..... dans d'autre colonnes.
A toi de voir ce qui te convient.
A ta dispo pour d'autres explications
@+
bonjour et merci bernard22 ! c'est presque ce dont j'aurai besoin, j'avais réussi a créer ce type menu déroulant parfaitement adapté pour les autres colonnes qui ne peuvent contenir qu'une seule réponse par cellule, alors que pour mes colonnes V et W plusieurs choix sont possibles, pour mieux me faire comprendre, ce que j'aimerai pour ces deux colonnes c'est donc de pouvoir créer un menu déroulant avec lequel je peux par exemple sélectionner à la fois "OH" et "métamphétamines" pour une même cellule.
Je ne sais pas si je suis claire dans ma demande...
Merci en tout cas de l'aide que vous m'apportez !
Bonsoir,
Je ne suis pas assez compétent.
Je m'étais déjà cassé les dents sur un sujet similaire.
Ce que j'avais trouvé de plus approchant c'est sur ce forum.
Vois le fichier joint si tu peux en tirer quelque chose.
Sinon, pourquoi ne pas avoir plusieurs colonnes ( une pour chaque choix) et dans la colonne résultat : concaténer les choix.....
@+
Ce que je cherche à lister c'est ce qu'il y a dans la ligne "codage" (ligne 2) des colonnes V et W.
J'ai bien compris !
Il y a plusieurs façons de faire pour obtenir le résultat que tu souhaites... si j'adoptais un dispositif qui m'aurait fait démonter ta liste pour y substituer autre chose (telle l'utilisation d'une ListBox...), je ne t'aurais certes pas demandé de mettre en place la liste pour la supprimer immédiatement après !
Cordialement.
Pas très coopératif !
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tx, i%, ntx$
If Target.Row < 2 Or Target.Count > 1 Then Exit Sub
If Intersect(Target, Me.Columns("V:W")) Is Nothing Then Exit Sub
On Error Resume Next
If Target.SpecialCells(xlCellTypeAllValidation).Cells.Count > 0 Then
If Err.Number <> 0 Then Exit Sub
If Target.Validation.Type = xlValidateList Then
If Err.Number <> 0 Then Exit Sub
End If
End If
On Error GoTo 0
Application.ScreenUpdating = False
Application.EnableEvents = False
ntx = Target.Value
Application.Undo
tx = Target.Value
If tx = "" Then
tx = ntx
ElseIf Not tx Like "* / *" Then
If tx = ntx Then
tx = ""
Else
tx = tx & " / " & ntx
End If
Else
tx = Split(tx, " / ")
For i = 0 To UBound(tx)
If tx(i) = ntx Then
ntx = "": tx(i) = "@"
Exit For
End If
Next i
If ntx <> "" Then
tx = Join(tx, " / ") & " / " & ntx
Else
tx = Replace(Join(tx, " / "), " / @", "")
If tx Like "@*" Then tx = Replace(tx, "@ / ", "")
End If
End If
Target.Value = tx
Application.EnableEvents = True
End Sub
Elle est à placer dans le module de la feuille.
Particularités :
Outre les tests d'usage : que l'on n'est pas ligne 1, que l'on n'agit pas sur plusieurs cellules, que l'on n'est pas ailleurs que dans les colonnes V ou W, on s'assure en outre que la cellule soit sous validation de type liste.
Lorsqu'un item est déjà dans la cellule et qu'on en sélectionne un second dans la liste, ce dernier est ajouté à la suite du premier. Séparateur : " / " tel que indiqué. Même chose pour un 3e, un 4e, etc.
Si on sélectionne un item déjà présent dans la cellule, ce dernier est ôté. Ce qui permet de rectifier sans avoir à effacer manuellement.
Lors de la mise en place de la liste de validation, il conviendra de décocher dans l'onglet Alerte d'erreur l'option : Quand des données non valides sont tapées.
Cordialement.
Bonjour MFERRAND et encore merci,
Vous avez parfaitement saisi ce que je souhaite et ce que vous proposez dans votre dernier message est parfaitement adapté. J'ai créé la liste comme demandée dans votre avant dernière réponse (si j'ai bien compris votre demande). Maintenant je n'arrive pas à comprendre comment je dois mettre en place la liste à choix multiples... qu'est ce que le "module de la feuille" ? (pardon si mes questions vous paraissent peu pertinentes...)
Bonjour,
Clic droit sur l'onglet, Visualiser le code dans le menu contextuel (c'est un raccourci d'accès à l'éditeur VBA, conduisant directement au module de la feuille sur laquelle on cliqué).
Y coller la procédure en entier.
La procédure est ce qu'on nomme une procédure évènementielle, qui se lance automatiquement lorsque survient dans la feuille l'évènement visé par la déclaration de procédure (1re ligne : Private Sub...). Il s'agit de l'évènement Change, constitué par un changement de valeurs dans une ou plusieurs cellules de la feuille concernée.
On programme donc cet évènement pour contrôler les changements qui nous intéressent. Ces changements étant bien localisés et correspondant à des modalités précises, cela explique que l'on commence par vérifier toutes ces conditions avant d'en venir à la raison d'être de la procédure. Si les conditions sont réunies, celle-ci récupère la valeur sélectionnée, annule cette insertion pour aller récupérer la valeur antérieure et la modifier dans le sens que j'ai indiqué dans le post précédent, en s'assurant que son intervention ne déclenche pas de nouvel évènement (ce qui pourrait entraîner une succession en chaîne... jusqu'à survenance d'erreur par saturation de la mémoire).
Il faudra enregistrer le classeur en xlsm (avec macro).
Cordialement.
Merciiiiiiiiiiiii ! Ca fonctionne parfaitement et c'est exactement ce que je voulais !
Merci pour votre patience et vos explications.
Bonjour,
Hé oui je suis de retour...
Pour rappel j'ai fait appel à vous pour pouvoir créer une liste déroulante avec plusieurs possibilités de choix pour une même liste déroulante (pour une liste contenant les possibilités 1 2 3, pouvoir sélectionner 1 et 3 à la fois). Le code envoyé fonctionnait parfaitement mais pour je ne sais quelle raison il y a eu un bug et ce code ne fonctionne plus donc je ne peux plus sélectionner mes multiples possibilités pour une même liste. J'ai pourtant de nouveau copié ce fameux code dans le VBA mais rien n'y fait.
Est ce qu'il est possible de nouveau de me venir en aide s'il vous plait ? Comment faire pour que le code soit de nouveau actif ?
Je vous joints le fichier sur lequel je travaille et voici le code qui avait été créé :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tx, i%, ntx$
If Target.Row < 2 Or Target.Count > 1 Then Exit Sub
If Intersect(Target, Me.Columns("V:Z")) Is Nothing Then Exit Sub
On Error Resume Next
If Target.SpecialCells(xlCellTypeAllValidation).Cells.Count > 0 Then
If Err.Number <> 0 Then Exit Sub
If Target.Validation.Type = xlValidateList Then
If Err.Number <> 0 Then Exit Sub
End If
End If
On Error GoTo 0
Application.ScreenUpdating = False
Application.EnableEvents = False
ntx = Target.Value
Application.Undo
tx = Target.Value
If tx = "" Then
tx = ntx
ElseIf Not tx Like "* / *" Then
If tx = ntx Then
tx = ""
Else
tx = tx & " / " & ntx
End If
Else
tx = Split(tx, " / ")
For i = 0 To UBound(tx)
If tx(i) = ntx Then
ntx = "": tx(i) = "@"
Exit For
End If
Next i
If ntx <> "" Then
tx = Join(tx, " / ") & " / " & ntx
Else
tx = Replace(Join(tx, " / "), " / @", "")
If tx Like "@*" Then tx = Replace(tx, "@ / ", "")
End If
End If
Target.Value = tx
Application.EnableEvents = True
End Sub
Merci d'avance.
Bonjour,
Prends l'habitude de mettre le code cité dans un post sous balises Code. Cela en conserve l'indentation et le rend beaucoup plus lisible...
Qu'est-ce qui ne fonctionne pas ? Car cela m'a l'air de fonctionner dans ton fichier joint !
Bonsoir,
Ecoutez je ne comprends pas, hier impossible de le faire fonctionner correctement mais comme vous il fonctionnait sur les autres ordinateurs que le mien, et aujourd'hui sans que je fasse quoique ce soit, il a de nouveau fonctionné... En tout cas merci encore pour ce code qui me sauve comme jamais pour mon recueil de données.
Bonne soirée