Résolu Macro VBA ListBox

Bénédicte-237

XLDnaute Nouveau
Bonjour à tous !

Grande débutante en VBA, je voulais faire un tableau où dans une même cellule, je pouvais faire une liste déroulante et affichée dans la cellule plusieurs éléments de la liste (donc pas une liste déroulante avec l'option "Validation des données"...).

Je me suis appuyée sur cette vidéo qui est assez bien faite où il est présenté l'option que je souhaite.
Néanmoins, c'est plus que ce dont j'ai besoin. En bricolant, j'ai plus ou moins réussit à obtenir ce que je voulais mais mon codage beug.

Pourriez-vous m'aider à le corriger ? Je met le fichier en PJ.

Merci !
 

Fichiers joints

Bénédicte-237

XLDnaute Nouveau
Bonjour,

Ma liste déroulante est dans la colonne M.
Quand on se positionne sur une cellule de cette colonne, la liste apparait bien mais pour les 2 premières lignes où il y a déjà des éléments dans la cellule, dans la liste en revanche rien n'est coché.
Et si on coche des choses et que par la suite nous allons sur une autre cellule de la même colonne, se sont toujours les mêmes choses qui sont cochées alors que la cellule est vide !
 

danielco

XLDnaute Impliqué
Ta macro est anormalement lente. Je regarde. Je ne comprends pas la ligne :
VB:
i = Application.Match(Cells(Target.Row, 2), .Range("Familles"), 0) - 1
Tu fais l'équivalent de la fonction EQUIV en recherchant le prénom de la cellule sélectionnée dans la plage "Familles" qui n'est définie nulle part ?

Daniel
 

BOISGONTIER

XLDnaute Barbatruc
Bonjour,

Exemple:

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([M2:M100], Target) Is Nothing And Target.Count = 1 Then
    Me.ListBox1.MultiSelect = fmMultiSelectMulti
    Me.ListBox1.List = Sheets("donnée").Range("A2:A22").Value
    a = Split(Trim(Target), "-")
    If UBound(a) >= 0 Then
      For i = 0 To Me.ListBox1.ListCount - 1
        If Not IsError(Application.Match(Me.ListBox1.List(i), a, 0)) Then Me.ListBox1.Selected(i) = True
      Next i
    End If
    Me.ListBox1.Height = 300
    Me.ListBox1.Width = 150
    Me.ListBox1.Top = Target.Top
    Me.ListBox1.Left = Target.Left + Target.Width
    Me.ListBox1.Visible = True
  Else
      Me.ListBox1.Visible = False
  End If
End Sub

Private Sub ListBox1_Change()
 For i = 0 To Me.ListBox1.ListCount - 1
   If Me.ListBox1.Selected(i) = True Then temp = temp & Me.ListBox1.List(i) & "-"
 Next i
 ActiveCell = Trim(temp)
End Sub
Boisgontier
 

Fichiers joints

Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas