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
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