Liste déroulante à choix multiple Excel 2007

Résolu
studio103 Messages postés 58 Statut Membre -  
 fval -
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

Résumé de la discussion

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.

Bobot (l'IA à votre service)
  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. CC
       
      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
    2. egreo4
       
      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