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

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 !
 

Pièces jointes

  • Essai 12-09 12_13.xlsm
    37.3 KB · Affichages: 11

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 Accro
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
Repose en paix
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
 

Pièces jointes

  • Copie de Essai 12-09 12_13.xlsm
    32.2 KB · Affichages: 17
Dernière édition:

Discussions similaires

Réponses
5
Affichages
508
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…