[VBA] - Affichage d'un menu contextuel sur Listbox

nico0007

XLDnaute Junior
Bonjour le Forum,

j'avance petit à petit au sujet de mon problème de menu suite à clic droit sur un élément d'une listbox. Voici où j'en suis:

Je sais maintenant qu'il faut que j'utilise la fonction MouseDown de la listbox.
Par contre je suis en train de sécher au sujet de ce menu contextuel. J'aimerai en fait pouvoir donc faire un clic droit sur un élément de ma listBox et que cela m'affiche un menu contextuel type popup que je définirai.
Il faudrait bien sûr que des évènements soient liés à ce menu.

QQun pour m'aider, je suis sans réponse depuis deux jours...

Merci
 

PMO2

XLDnaute Accro
Re : [VBA] - Affichage d'un menu contextuel sur Listbox

Bonjour,

Voici des exemples de code pour afficher un menu contextuel dans une ListBox.
Vous n'avez pas précisé pas si votre ListBox est dans une feuille Excel en tant qu'OLEobject ou dans un UserForm.
J'ai donc traité les 2 cas.

MARCHE A SUIVRE
1) Dans Excel, créez une feuille "test" et insérez-y un CommandButton1 et une ListBox1 (en tant qu'OLEobject).
Remplissez la plage A1:C12 de données (utilisez cette plage pour alimenter la ListBox).
Copiez le code suivant dans la feuille Excel concernée
Code:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then Call CreeContext
End Sub

2) Dans le VBE, créez un UserForm1 avec une ListBox1 et un CommandButton1
Copiez le code suivant dans la fenêtre de code du UserForm
Code:
Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then Call CreeContext
End Sub

Private Sub UserForm_Initialize()
Dim var
With ListBox1
  .ColumnCount = 3
  .ColumnWidths = "100;100;100"
  var = Sheets("test").Range("a1:c12")
  .List() = var
End With
End Sub

3) Dans un module standard, copiez le code suivant
Code:
Sub CreeContext(Optional dummy As Byte)
Dim CB As CommandBar
Dim C As CommandBarButton
On Error Resume Next
CommandBars("MonContextuel").Delete
On Error GoTo 0
Set CB = CommandBars.Add(Name:="MonContextuel", Position:=msoBarPopup, temporary:=True)
With CB
  Set C = .Controls.Add(Type:=msoControlButton)
  With C
    .OnAction = "affichetoto"
    .FaceId = 2
    .Caption = "toto"
  End With
  Set C = .Controls.Add(Type:=msoControlButton)
  With C
    .OnAction = "affichezaza"
    .FaceId = 3
    .Caption = "zaza"
  End With
  .ShowPopup
End With
End Sub

Sub affichetoto(Optional dummy As Byte)
MsgBox "C'est Toto"
End Sub

Sub affichezaza(Optional void As Byte)
MsgBox "Je m'appelle Zaza"
End Sub

Comme tout cela est fastidieux, je mets un classeur exemple tout prêt en pièce jointe.

Cordialement.

PMO
Patrick Morange
 

nico0007

XLDnaute Junior
Re : [VBA] - Affichage d'un menu contextuel sur Listbox

Je te remercie fortement d'avoir passé du temps à m'aider. J'avais trouvé une autre solution mais grâce à ton code je peux maintenant comprendre le fonctionnement du menu contextuel.

Encore une fois merci et bonne journée !!:)
 

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 355
Membres
102 874
dernier inscrit
Petro2611