Liste déroulante à choix multiple Excel 2007
Résolufval -
Je suis un vraiment newbe d'Excel. Je dois préparer un masque de saisie.
Et il me serait très utile d'avoir une liste déroulante (ça j'ai fait avec "validation des données") ou l'on puisse choisir plusieurs modalités.
En fait, il s'agit de déplacement, genre: voiture, à pied, bus, etc. Et ces modes de transport peuvent se succéder.
Le top serait d'avoir l'ordre du choix mais si j'ai déjà un choix multiple, je serais comblé
Une idée ?
Merci d'avance
- M'aider à créer un formulaire de saisie excel et qui porte des boxes en liste déroulante en cascade
- Liste déroulante excel - Guide
- Whatsapp formulaire opposition - Guide
- Liste déroulante en cascade - Guide
- Créer un lien pour partager des photos - Guide
- Comment créer un groupe whatsapp - Guide
19 réponses
La solution efficace consiste à utiliser un formulaire utilisateur VBA avec une ListBox en sélection multiple et un bouton de validation qui concatène les choix et les écrit dans une cellule cible.
Le code associé au bouton collecte les éléments sélectionnés, les joint avec un séparateur et place le résultat dans une cellule (par exemple C4), puis ferme le formulaire.
Pour étendre l’usage à plusieurs lignes, il est possible d’adapter le déclenchement sur ActiveCell et, si nécessaire, de restreindre le formulaire à une plage via Worksheet_BeforeDoubleClick.
En alternative, la validation des données autorise uniquement des sélections simples ou des combinaisons préécrites, ce qui explique pourquoi la méthode VBA est généralement privilégiée pour des trajets pouvant se succéder.
I/ Création
1- Tu ouvres ton classeur,
2- Tapes ALT+F11 (ou Outils/Macros/Visual Basic Editor)
3- Insertion/UserForm
4- Adaptes en la forme à la taille désirée,
5- Sur la gauche de ton écran tu dois avoir une fenêtre "propriétés". Si ça n'est pas le cas, appuies sur F4. Dans cette fenêtre cherche la propriété "caption". Dans la cellule à côté change le UserForm1 par le titre que tu souhaites (ex : Ma Liste Multiple). !!! ATTENTION : ne change pas la propriété Name !!!!!
6- Clic sur ton UserForm. Normalement, une boîte à outils apparait. Non? et bien : Affichage/Boîte à Outils
7- Dans cette boîte à outils cherche (et trouve) le contrôle : "zone de liste". Clic dessus et va dessiner ta zone de liste dans ton UserForm
8- Toujours dans la boîte à outils cherche (et trouve) le contrôle : "Bouton de commande". Clic dessus et va dessiner ton boutondans ton UserForm.
9- Simple clic sur le bouton (dans le UserForm) et va changer la propriété (fenêtre propriétés... Mais si à gauche de l'écran, F4, tout ça...) "caption" remplacer CommandButton1 (ex : VALIDER). !!! ATTENTION : ne change pas la propriété Name !!!!! ;-) Tu t'y attendais? Non? Ah bon...
10- Tu peux également changer l'apparence de ton bouton en changeant les propriétés : BackColor, Font, ForeColor. Idem pour l'UserForm (simple clic dessus et hop hophop, tu as accès à ses propriétés)
II/ Les Codes VBA
Là ça devient sérieux, on arrête de bricoler!!
1- Double clic sur le bouton de commande dans ton UserForm. Une nouvelle fenêtre apparait avec dedans :
Private Sub CommandButton1_Click() End Sub
2- Supprime ces deux lignes et à la place, copie / colle tout ce code :
Option Explicit
Private Sub CommandButton1_Click()
Dim i As Byte
Dim ValeurARetourner As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ValeurARetourner = ValeurARetourner & ListBox1.List(i) & " & "
End If
Next i
With Sheets("Feuil1")
.Range("C4") = Left(ValeurARetourner, Len(ValeurARetourner) - 3)
.Range("C5").Activate
End With
UserForm1.Hide
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer, Derlig As Integer
ListBox1.Clear
Derlig = Sheets("Feuil1").Cells(65536, 9).End(xlUp).Row
For i = 1 To Derlig
ListBox1.AddItem Cells(i, 9).Value
Next i
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ListBox1.Selected(i) = False
End If
Next i
End Sub
3- Les 9 dans les parties en gras dans le code ci dessus sont à adapter selon l'endroit ou tu as mis tes données de remplissage de ta liste. 9 = 9ème Colonne (Colonne I)
3 bis- Dans la ligne : Derlig = Sheets("Feuil1").Cells(65536, 9).End(xlUp).Row, "Feuil1" est le nom de la feuille ou se trouve la liste des données. A remplacer par le nom de votre feuille (entouré de "")
3 ter- "C4" dans : .Range("C4") = Left(ValeurARetourner, Len(ValeurARetourner) - 3) est la cellule dans laquelle vous voulez envoyer vos choix
.Range("C5").Activate à adapter également
With Sheets("Feuil1") Feuil1 à remplacer aussi...
4- Ferme Visual Basic Editor (fichier / fermer et retourner sous excel ou ALT+Q)
5- Clic droit sur l'onglet de la feuille concernée par le UserForm (feuille ou tu souhaites voir apparaitre le résultat) / Visualiser le code
Nouvelle fenêtre visual basic. Copie / colle y ce code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$C$4" Then
Target.Value = ""
Load UserForm1
UserForm1.Show
End If
End Sub
Ici "$C$4" est la cellule dans laquelle tu va à l'avenir double cliquer pour lancer le UserForm. A adpater donc...
6- Ferme à nouveau Visual Basic (Alt+Q) et teste en double cliquant sur C4 (ou ce que tu aurs bien voulu choisir).
J'ai fait de mon mieux pour que ces explications soient le plus claires possibles. En cas d'erreur, n'hésite pas à revenir ici.
Je sais que j'arrive avec de nombreux mois de retard, mais si jamais quelqu'un peut m'aider... ?
Voilà mon problème :
J'apprends à créer des listes à choix multiples grace à votre tuto et merci pour tout.
Lorsque je crée le bouton de commande, il n'apparait pas (transparent) et lorsque j'ai terminé, même si ma liste a bien été créée, il n'y a pas le bouton de validation lorsque on a sélectionné.
Pouvez-vous m'aider ?
Merci d'avance
j'ai suivi tes instructions et j'arrive à avoir une fenêtre qui propose plusieurs en double clicant sur une cellule (ici C16)
J'aimerais savoir comment modifier le code ci dessous pour que je puisse avoir la même liste de choix en C17, C18 etc.. et cela sans limite (idéalement pour toute la colonne).
Voici le code actuellement utilisé pour l'UF :
Private Sub CommandButton1_Click()
Dim i As Byte
Dim ValeurARetourner As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ValeurARetourner = ValeurARetourner & ListBox1.List(i) & " & "
End If
Next i
With Sheets("Demande")
.Range("C16") = Left(ValeurARetourner, Len(ValeurARetourner) - 3)
.Range("C16").Activate
End With
UserForm1.Hide
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer, Derlig As Integer
ListBox1.Clear
With Sheets("Infos")
Derlig = .Cells(65536, 2).End(xlUp).Row
For i = 1 To Derlig
ListBox1.AddItem .Cells(i, 2).Value
Next i
End With
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ListBox1.Selected(i) = False
End If
Next i
End Sub