XL 2016 Liste de choix à sélection multiple

StanSigma

XLDnaute Junior
Bonjour à tous,

Je fais une nouvelle fois appel aux compétences excel des membres de ce forum à propos d'un fichier.
Je souhaite faire une liste déroulante (ou zone de liste) avec une sélection multiple (c'est à dire que je puisse sélectionner plusieurs champs de la liste).
J'ai recherché sur internet et ai trouvé l'objet zone de liste avec comme type de sélection "Multiple", ceci me va très bien cependant lorsque je lie la zone de liste à une cellule (pour me renvoyer le ou les résultats), il ne renvoie que 0 peut importe le résultat choisi.
Comment faut-il procéder pour obtenir les données choisies ?
Dois-je passer par du VBA ?

Ci-joint le fichier pour imager mes propos, dans la feuille "GR1" j'ai 5 listes en ligne 3-7, j'ai la source de mes zone de listes dans la feuille "Support".

Merci d'avance pour le temps que vous accordez à mon projet.
 

Pièces jointes

  • Analyse entrepot (V2).xlsm
    93.5 KB · Affichages: 18

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @StanSigma , le Forum

Oui c'est uniquement par VBA pour du Multi-Selections sur les ListBox de Form Control ,(Non-ActiveX). C'est "normal" que ça retourne 0 en Design Mode, il lui faut du code...

Voici ce que l'on peut faire pour envoyer la selection dans la Linked Cell...

Bon Week-End
@+Thierry
 

Pièces jointes

  • XLD_ StanSigma_Analyse_Entrepot_ControlFormListBoxMultiSelect_v00.xlsm
    107.1 KB · Affichages: 11

StanSigma

XLDnaute Junior
Merci beaucoup c'est exactement cela, est ce que tu pourrais m'expliquer le code car je n'ai pas tout compris..
J'ai mis en notes les questions que j'avais
VB:
Sub ListBox1_Change()
    Dim myListBox As ListBox
    Dim myText As String
    Dim i As Long
    Set myListBox = Feuil1.ListBoxes("List Box 1") 'Pourquoi Feuil1.ListBoxes ?
    With myListBox
        For i = 1 To .ListCount
            If .Selected(i) Then
                myText = myText & ", " & .List(i) 'Tous les champs sélectionnés sont stockés dans myText (ex : P12, P16, P999) ?
            End If
        Next i
        Feuil1.Range(.LinkedCell).Value = Trim(Mid(myText, 2)) 'Pourquoi Feuil1 ? et je n'ai pas compris Trim(Mid(myText, 2).
    End With
End Sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour @StanSigma , le Forum

1) Pour :
Set myListBox = Feuil1.ListBoxes("List Box 1") 'Pourquoi Feuil1.ListBoxes ?

Une petite image
1595077936538.png

Feuil1 est le CodeName de la Feuille "GR1", c'est une façon d'appeler les Feuilles ...

2) Pour :
myText = myText & ", " & .List(i) 'Tous les champs sélectionnés sont stockés dans myText (ex : P12, P16, P999) ?
Exact , je stock tout dans une string... Je pourrais faire une Array aussi... ou envoyer en Cells(i,1) par exemple...


3) Pour :
Feuil1.Range(.LinkedCell).Value = Trim(Mid(myText, 2)) 'Pourquoi Feuil1 ? et je n'ai pas compris Trim(Mid(myText, 2).
Pour Feuil1, c'est expliqué en Pour 1)
Pour Mid et bien le mieux est de voir l'aide sur cette Fonction
Et aussi ici c'est interressant :
Je n'indique que 2 en position de départ (J'ignore la première "," que j'ai créée) , la longueur est faculative. (par défaut, il prend toute la chaine du coup à partir de 2)
Le Trim m'élime ensuite l'espace que j'ai créé aussi dans myText = myText & ", " & .List(i)

Voilà j'espère t'avoir éclairé sur ces questions...

Bon week-end
@+Thierry
 

StanSigma

XLDnaute Junior
Merci pour ton temps et tes explications c'est top j'ai tout compris,
j'ai une dernière question, si je souhaite avoir les résultats dans des cellules différentes, tu sais comment faire?
Exemple : Au lieu d'avoir en AN2 : "C101,C110,C120" j'aurais en AN2 : C101 en AO2 : C110 en AP2, C120.

Merci
Bon week end
 

StanSigma

XLDnaute Junior
Pour faire suivre mon précédent message, j'ai testé ceci à partir de ton code :

VB:
Sub ListBox1_Change()
    Dim myListBox As ListBox
    Dim myText As String
    Dim i As Long
    Set myListBox = Feuil1.ListBoxes("List Box 1")
    With myListBox
        For i = 1 To .ListCount
            If .Selected(i) Then
                myText = .List(i)
                Sheets("GR1").Cells(2, i + 39) = myText
            End If
            
        Next i
        
    End With
End Sub

Il fonctionne lorsque je sélectionne un nouveau champs mais lorsque je désélectionne un champs, la cellule ne se vide pas...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @StanSigma , le Forum

J'ai un peu amélioré la version pour correspondre un peu mieux à ce que tu souhaites faire.
Cependant je trouve quand même que ces bons vieux "Form Controls" qui datent d'Excel 5 sont un peu long en réaction quand pilotés par VBA comparé à des ActiveX de UserForm...

J'ai devancé tes besoins aussi avec les CheckBoxes, mais par contre maintenant que je vais écrire de AN à AU pour les résultats multi-selection, je ne vois pas encore trop comment tu vas appliqué ton Algo "Filtre_global" là dessus surtout que dans l'exemple que j'ai sous les yeux pour "Emplacement" par exemple "C120" se répète à vita-eternam...

J'ai un peu optimisé cet Algo par la même occasion, mais les [Hide-Rows] "coûtent" en temps machine de toute façon sur beaucoup de Rows...

Je te souhaite tout le courage pour la suite !!!

Bonne soirée
@+Thierry
 

Pièces jointes

  • XLD_ StanSigma_Analyse_Entrepot_ControlFormListBoxMultiSelect_v01.xlsm
    115.1 KB · Affichages: 22

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 192
dernier inscrit
F.Venne