Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Liste déroulante à sélection multiple liée à une seule cellule

zoec

XLDnaute Nouveau
Bonjour,
Je cherche à faire une liste déroulante à sélection multiple, dont les éléments choisis apparaîtraient dans une seule cellule avec un séparateur virgule, ligne par ligne.
J'ai fait des recherches et ai pu écrire mon code en VBA. Je joins un exemple de mon fichier, épuré pour des questions de confidentialité.
Sur la feuille LVC, colonne AL, je voudrais avoir pour chaque ligne la liste de choix qui se trouve dans la feuille Liste, et que ces résultats apparaissent dans la colonne AM.
Or, une erreur persiste...le déroulement est bloqué à "LbxAnalysesUn.ListFillRange = "Liste!" & Worksheets("Liste").Range(nomListe(numListe)).Address") et je n'arrive pas à trouver la solution.
Merci de votre précieuse aide !

Voici la section de code où le blocage a lieu:
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ch As String, ch2 As String, pos As Long, i As Long
Dim plage, numListe As Long, topIndex As Boolean
Dim nomListe As Variant
' plages avec sélection multiple sur cette feuille
plage = Array("AL7:AL2400")
' nom des liste dans la feuille liste (en liaison avec les plages définies au-dessus)
nomListe = Array("Analyse1")
' plage concernée ?
For numListe = 0 To UBound(plage) 'boucle sur le tableau
If Not Intersect(Target, Range(plage(numListe))) Is Nothing Then Exit For
Next numListe

If numListe <= UBound(plage) Then ' si plage de liste existant
' initialiser listbox
LbxAnalysesUn.ListFillRange = "Liste!" & Worksheets("Liste").Range(nomListe(numListe)).Address
LbxAnalysesUn.Top = Target.Offset(1, 0).Top
LbxAnalysesUn.Left = Target.Offset(0, 1).Left

Analyses1 = True ' palliatif, EnableEvents ne marche pas
ch = ActiveCell
ch2 = [separateur] & ch & [separateur]
topIndex = False
' sélectionner selon contenu cellule
For i = 0 To LbxAnalysesUn.ListCount - 1
If InStr(ch2, [separateur] & LbxAnalysesUn.List(i) & [separateur]) > 0 Then
' l'item a été trouvé dans la cellule
LbxAnalysesUn.Selected(i) = True
If Not topIndex Then
LbxAnalysesUn.topIndex = i ' le 1er sélectionné doit être visible dans la textbox
topIndex = True
End If
End If
Next i
Analyses1 = False
' afficher textbox
LbxAnalysesUn.Visible = True
Else
' ne plus afficher la textbox
LbxAnalysesUn.Visible = False
End If
End Sub
 

Pièces jointes

  • Réalisations mensuelles des analyses 2020 macro - Copie.xlsm
    242.7 KB · Affichages: 21
Solution
Cela est dû au fait que vous n'avez pas créé de Listbox dans la feuille. Il faut créer la Listbox nommée (LbxAnalysesUn) directement dans la feuille LV (pas dans unUserForm).
Il faut créer une Listbox Contrôle ActiveX, pas Contrôle Formulaire
Voulez-vous que je le fasse pour vous?

zoec

XLDnaute Nouveau
La variable LbxAnalysesUn n'est pas définie.
Il faut créer un Userform, et dans cet Userform, créer une ListBox nommée LbxAnalysesUn .

Cordialement,
--
LR
Bonjour,
Merci pour votre réponse. Cependant, je souhaiterais ne pas recourir à une boîte de dialogue, car ce n'est pas ce que mes collègues recherchent. A moins qu'il soit possible de définir une ListBox sans userform ? Je voudrais le même fonctionnement que sur cet exemple ci (cf. document joint)... sauf que je ne vois pas quelle est la différence avec mon code faisant que cela fonctionne.
 

Pièces jointes

  • axe2.xlsm
    41 KB · Affichages: 18

laurent3372

XLDnaute Impliqué
Cela est dû au fait que vous n'avez pas créé de Listbox dans la feuille. Il faut créer la Listbox nommée (LbxAnalysesUn) directement dans la feuille LV (pas dans unUserForm).
Il faut créer une Listbox Contrôle ActiveX, pas Contrôle Formulaire
Voulez-vous que je le fasse pour vous?
 

zoec

XLDnaute Nouveau
Effectivement, et je n'avai pas créé mon objet ! Merci beaucoup pour votre aide ! (et toutes mes excuses pour ma réponse tardive)
 

Discussions similaires

Réponses
4
Affichages
450
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…