Liste déroulante à selection multiple !

Résolu
Bonjour,

Je voudrais créer une liste déroulante à partir de laquelle on pourrait cocher plusieurs valeurs à la fois. Et bien sûr la cellule doit afficher toutes les valeurs que l'on a coché séparé par un "/" ou un "&".

Ma liste déroulante contiendrait 63 valeurs; vous comprenez que je ne peux pas faire manuellement toutes les combinaisons possibles, d'où cette liste déroulante à choix multiple.

Et voici le code que j'ai rentré :

Option Explicit

Private Sub CommandButton1_Click()
Dim i As Byte
Dim ValeurARetourner As String

For i = 0 To ComboBox1.ListCount - 1
If ComboBox1.Selected(i) = True Then
ValeurARetourner = ValeurARetourner & ComboBox1.List(i) & " & "
End If
Next i
If ValeurARetourner = "" Then
MsgBox "Sélection obligatoire ou fermez avec la croix"
Exit Sub
End If
ActiveCell = Left(ValeurARetourner, Len(ValeurARetourner) - 3)
ActiveCell.Offset(1, 0).Activate
End With
UserForm1.Hide
Unload UserForm1
End Sub

Private Sub UserForm1_Initialize()
Dim i As Integer, Derlig As Integer
ComboBox1.Clear

Derlig = Sheets("EVENT").Cells(65536, 2).End(xlUp).Row
For i = 1 To Derlig
ComboBox1.AddItem Cells(i, 2).Value
Next i
For i = 0 To ComboBox1.ListCount - 1
If ComboBox1.Selected(i) = True Then
ComboBox1.Selected(i) = False
End If
Next i
End Sub

Sauf que je reconcontre une erreur pour la ligne suivante :
If ComboBox1.Selected(i) = True Then

En effet il m'affiche "Method or data member not found"

Voilà et Merci pour votre réponse.

3 réponses

  1. Modérateur
    Salut,
    Je t'ai retrouvé...
    1- es tu sur(e) qu'il s'agisse d'une Combobox? Ce serait pas plutôt une ListBox?

    2- Si tel est le cas, la syntaxe est :
    For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then 
                 ValeurARetourner = ValeurARetourner & ListBox1.List(i) & " & "       End If
    Next i
    1. Oui c'est une Combobox et au début je mettais listbox mais il m'affichait " variable not set or not declared"...
    2. J'ai une procédure associée à CommandButton1_Click() mais c'est vrai que je n'ai pas de procédure assoicée à ComboBox1_Change() ...
      Peut-être que c'est ça l'erreur non ?!

      Merci
    3. Modérateur
      Une ComboBox à sélection multiple? Jamais vu...
      Peux tu nous passer une copie de ton fichier que je regarde ton UserForm?
    4. La question va te paraître bête mais je sais pas comment attacher le fichier ;(...

      Merci
    5. Modérateur
      Non la question n'est pas bête.

      pour joindre un fichier :
      mettre le classeur sans données confidentielles en pièce jointe sur

      https://www.cjoint.com/
      puis copier l'adresse du lien et la coller dans le message de réponse *

      *copyright Michel_m
  2. Modérateur
    Pour les deux options listbox ou combobox, voici :
    Le Fichier Exemple avec les 2 cas

    Les deux codes :
    AVEC LISTBOX ET UN BOUTON :
    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
    If ValeurARetourner = "" Then
        MsgBox "Sélection obligatoire ou fermez avec la croix"
        Exit Sub
    End If
    ActiveCell = Left(ValeurARetourner, Len(ValeurARetourner) - 3)
    ActiveCell.Offset(1, 0).Activate
    
    UserForm1.Hide
    Unload UserForm1
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim i As Integer, Derlig As Integer
    
    ListBox1.Clear
    ListBox1.MultiSelect = fmMultiSelectMulti
    With Sheets("EVENT")
        Derlig = .Range("B" & Rows.Count).End(xlUp).Row
        For i = 1 To Derlig
            ListBox1.AddItem .Cells(i, 2).Value
        Next i
    End With
    End Sub
    


    AVEC COMBOBOX ET DEUX BOUTONS :
    Option Explicit
    Dim ValeurARetourner As String
    
    Private Sub CommandButton1_Click()
    If ComboBox1 <> "" Then
        ValeurARetourner = ValeurARetourner & ComboBox1 & " & "
    Else
        MsgBox "Sélection obligatoire ou fermez avec la croix"
        Exit Sub
    End If
    End Sub
    
    Private Sub CommandButton2_Click()
    ActiveCell = Left(ValeurARetourner, Len(ValeurARetourner) - 3)
    ActiveCell.Offset(1, 0).Activate
    
    UserForm2.Hide
    Unload UserForm2
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim i As Integer, Derlig As Integer
    
    ComboBox1.Clear
    With Sheets("EVENT")
        Derlig = .Range("B" & Rows.Count).End(xlUp).Row
        For i = 1 To Derlig
            ComboBox1.AddItem .Cells(i, 2).Value
        Next i
    End With
    End Sub
    1. Merci ça fonctionne ....

      Les 2 codes fonctionnent très bien!
      maintenant à moi de le réadapter dans le vrai fichier où en fait la liste des départements se trouve dans une autre feuille que celle où l'on effectue la saisie.
      A priori il doit pas y avoir de problèmes mais qui sait...
      il se peut que je revienne encore vers toi ;)

      Merci encore