Liste déroulante à choix multiple Excel 2007

Résolu/Fermé
studio103 Messages postés 51 Date d'inscription samedi 2 août 2008 Statut Membre Dernière intervention 6 décembre 2010 - 27 oct. 2010 à 13:30
 fval - 2 juin 2016 à 20:14
Bonjour,

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

19 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
28 oct. 2010 à 15:09
Et bien allons y.

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.
13
Bonjour,

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
0
salut pijaku,

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
0