Liste deroulante choix multiple via useform

Bonjour,

j'utilise un useform de liste déroulante à sélection multiple qui s'affichent sur une cellule que j'ai choisi. Jusqu'a là sa va. Maintenant je souhaite appliquer mes choix à plusieurs cellules (un choix, une cellule et non tous les choix dans la même cellule. Quelqu'un sait comment faire?

Voici mon code pour mon useform

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("Field")

.Range("A3") = Left(ValeurARetourner, Len(ValeurARetourner) - 3)

.Range("B3").Activate

End With

UserForm1.Hide

Unload UserForm1

End Sub

Private Sub UserForm_Initialize()

Dim i As Integer, Derlig As Integer

ListBox1.Clear

Derlig = Sheets("Field").Cells(65536, 21).End(xlUp).Row

For i = 1 To Derlig

ListBox1.AddItem Cells(i, 21).Value

Next i

For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) = True Then

ListBox1.Selected(i) = False

Ici c'est la cellule choisie pour afficher les choix:

.Range("A3") = Left(ValeurARetourner, Len(ValeurARetourner) - 3)

et je voudrais que chaque choix de ma liste déroulante soit affiché dans des differentes cellules à la suite A3,A4,A5,A6....

Help

Bonjour,

Il te suffit :

1) de déclarer ta variable ValeurARetourner de type Variant (ne pas mettre de As..., ça suffit)

2) de concaténer les valeurs trouvées dans cette variable, comme précédemment, mais de préférence en utilisant un caractère séparateur autre que & (par exemple : ; [point-virgule], en tout cas un caractère dont il est sûr qu'il ne soit pas utilisé dans les textes concaténés)...

3) de supprimer du contenu de la variable le dernier caractère, comme précédemment (tu ne devrais en avoir qu'un si tu t'abstiens d'ajouter des espaces qui deviendraient parasites),

4) de vérifier que la variable contient au moins un caractère séparateur (sinon il n'y a qu'une valeur), et recueillir leur nombre serait utile car le nombre d'éléments à affecter (et de cellules concernées) est égal à ce nombre + 1,

5) splitter (utilisation de la fonction Split permettant de transformer un chaîne en tableau) le contenu de la variable sur ce caractère séparateur,

6) affecter les valeurs du tableau (en utilisant une boucle) à la plage de cellule souhaitée.

Cordialement

Merci MFerrand d'avoir pris la peine à me répondre. J'ai appris à utiliser les useforms ce matin en fuillant sur le net et j'essaie de comprendre les pas à effectuer que tu me décris mais je n'y arrive pas.

Je ne sais pas changer une variable en variant, je n'ai jamais utiliser la fonction split.... enfin j'arriverai jamais comme sa

Re,

J'ai peut-être oublié de préciser que je n'écris pas de code si on ne fournit pas de fichier pour le faire.

Cordialement.

Mille excuses, oui avec le fichier tu comprendras mieux

La useform est sur "Field" dans la cellule "A2"

45new-pdp.xlsm (136.84 Ko)

Procédure réaménagée :

Private Sub CommandButton1_Click()
Dim i As Byte
Dim ValeurARetourner, v As Integer

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            ValeurARetourner = ValeurARetourner & ListBox1.List(i) & ";"
        End If
    Next i
    ValeurARetourner = Left(ValeurARetourner, Len(ValeurARetourner) - 1)
    For i = 1 To Len(ValeurARetourner)
        If Mid(ValeurARetourner, i, 1) = ";" Then v = v + 1
    Next i
With Sheets("Field")
    .Range("A3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
    If v > 0 Then
        ValeurARetourner = Split(ValeurARetourner, ";")
        For i = 0 To v
            .Cells(i + 3, 1) = ValeurARetourner(i)
        Next i
    Else
        .Range("A3") = ValeurARetourner
    End If
    .Range("B3").Activate
End With
UserForm1.Hide
Unload UserForm1
End Sub

Petit ajout à ma précédente description : l'effacement des valeurs précédentes.

Cordialement

49flor-new-pdp.xlsm (146.74 Ko)

Je ne sais pas comment te remercier, j’étais vraiment bloquée et je n'arrivais plus à avancer.

Petit question, pourquoi ma limite de choix multiple est de 16 alors que j'ai 39 cellules à remplir?

Encore merci!!!!

69new-pdp2.xlsm (147.69 Ko)

Tout ce que je peux te dire, c'est que l'alimentation de la ListBox se fait à partir de la liste en colonne U : 15 noms + 1 ligne vide.

Voir la procédure Initialize.

Si cela ne correspond pas à ce que tu souhaites faire, c'est que la méthode est mal adaptée (?)

Cordialement

Rechercher des sujets similaires à "liste deroulante choix multiple via useform"