Listbox VBA Excel [Résolu]

Signaler
Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020
-
Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
-
Bonjour,

Je n'y connais rien en VBA mais j'ai fait mes petites recherches pour réussir à faire ce que je devais faire.
Une liste à choix multiple qui permet de sélectionner plusieurs éléments de la liste.

J'ai trouvé ce bout de code qui avait l'air fonctionnel:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Me.ListBox1
        If Not Intersect([D2:D300], Target) Is Nothing Then
            .List = Sheets("Listes").Range("E2:E12").Value
            For i = 0 To .ListCount - 1
                If InStr(1, Target, .List(i)) > 0 Then .Selected(i) = True
            Next i
            .Height = 105
            .Width = 235
            .Top = Target.Top
            .Left = Target.Left + Target.Width
            .Visible = True
        Else
            .Visible = False
        End If
    End With
End Sub

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

Ce bout de code que je mets dans Visual Basic > Feuil1 (nomdelafeuille)

Mais de mon côté, j'ai ce message :
"Erreur de compilation:
Membre de méthode ou de données introuvable."
Et Excel me surligne la première ligne.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Si vous vous posez la question, j'ai bien une feuille qui s'appelle "Listes". La liste se trouve dans le range E2:E12 de cette feuille.

Y a-t-il un truc que je n'ai pas fait avec VBA et qu'il faudrait que je fasse?
J'utilise Excel 2013 et j'ai bien enregistré le fichier au format .xlsm

Je vous remercie!

11 réponses

Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
2 072
Re

Vu la possibilité qu'il doit y avoir d'écrire ce qu'on veut, j'ai procédé autrement à l'aide d'un userform
L'ouverture de l'UF est déclenchée par un double-clic dans la cellule de la colonne D à compléter
Multi sélection possible
Si dernier élément de la liste choisi (Autre) une boite message demande d'entrer du texte
Ensuite les choix sont reportés dans la cellule séparés par des virgules
https://mon-partage.fr/f/qmAeUz8l/

En espérant que cela répondra à tes attentes
Cdlmnt
Via
Messages postés
7089
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 novembre 2020
579
Bonjour,

cela fonctionne chez moi, il suffit de déclarer
Dim i As Integer 


comme ceci:

Option Explicit
Dim i As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Me.ListBox1
        If Not Intersect([D2:D300], Target) Is Nothing Then
            .List = Sheets("Listes").Range("E2:E12").Value
            For i = 0 To .ListCount - 1
                If InStr(1, Target, .List(i)) > 0 Then .Selected(i) = True
            Next i
            .Height = 105
            .Width = 235
            .Top = Target.Top
            .Left = Target.Left + Target.Width
            .Visible = True
        Else
            .Visible = False
        End If
    End With
End Sub
Private Sub ListBox1_Change()
    Dim temp$
    With Me.ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then temp = temp & .List(i) & " "
        Next i
        ActiveCell = Trim(temp)
    End With
End Sub


Ta listBox est un control ActiveX comme ceci:





Messages postés
1265
Date d'inscription
samedi 2 février 2019
Statut
Membre
Dernière intervention
25 novembre 2020
127
Bonjour,
As-tu seulement une ListBox1 ?
Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
2 072
Bonjour

As tu créé auparavant un Listbox dans ta feuille portant bien le nom ListBox1?

Envoie ton fichier plutôt que le code, en le postant sur mon-partage.fr, en copiant le lien créé et en revenant le coller ici

Cdlmnt
Via
Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020

Au vu de vos réponses, je pense que rien n'est bon...

Voici le fichier : https://mon-partage.fr/f/vNULZ8Ti/

Sur toutes les lignes de la colonne D, il faut pouvoir accéder à la liste et cocher les valeurs désirées
Et aussi, je ne sais pas si c'est possible, lorsqu'on choisit "Autre", avoir la possibilité d'écrire ce que l'on veut
Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020

Wow... Excel est vraiment incroyable :o

Par contre, dès que j'ouvre le formulaire, il me complète la cellule D4, même si je clique ailleurs dans cette colonne
J'ai essayé de voir d'où ça pouvait venir, mais je n'ai pas réussi
Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
2 072
Désolé, erreur de ma part, confusion entre colonne et ligne !
Fichier rectifié :
https://mon-partage.fr/f/Zl9OCVKF/

Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020

Quelque chose que je ne comprends pas, comment le formulaire sait qu'il doit prendre les éléments de E2 à E12 de la feuille "Listes"? C'est avec une Listbox? Y a-t-il un moyen de gérer ces Listbox?
Par exemple si je veux créer un formulaire avec une deuxième liste? Ou si je veux simplement ajouter des éléments à la liste "public"?
Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020

Aussi, peu importe où je clique sur la feuille Excel, le formulaire s'ouvre (pas seulement lorsque je double clic sur la colonne). Est-ce normal?

Je vous remercie
Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
2 072
1) Pour voir l'Userform (et éventuellement en créer d'autres), ouvrir éditeur VBA, cliquer sur Feuilles dans l'arborescence puis sur Userform1
Dans l'UF qui s'affiche clic droit sur la Listbox et Propriétés
Dans les propriétés :
a) MultiSelect mis en MultiSelectMulti permet de sélectionner plusieurs items dans la liste
b) dans RowSource on indique la plage de la liste, ici =Listes!E2:E12

2) Pour que le double-clic n'opère que dans la colonne D dans la macro Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) liée à le feuille Animations rajoute la 1ere ligne suivante :
If target.column <>4 then Exist Sub
Messages postés
21
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
22 novembre 2020

Cela doit-il donner quelque chose comme :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If target.column <>4 then Exist Sub
ligne = Target.Row
UserForm1.Show
End Sub


Car cela me fait une erreur de compilation sur la ligne ajoutée :(
Messages postés
12862
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 novembre 2020
2 072
Normal c'est Exit et non pas Exist