Bonjour,
j'ai crée un menu personnalisé dans la barre principale excel avec des sous menu et une liste déroulante (msoControlDropdown) pour choisir une option. Je souhaite récupérer l'index du choix dans cette liste.
Voici le code de ma barre menu (placé dns thisWorkbook):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Private Sub Workbook_Open()
Dim Nouveau As CommandBarControl
Dim Nouveau10 As CommandBarControl
Dim Nouveau11 As CommandBarControl, Nouveau12 As CommandBarControl
Dim Nouveau20 As CommandBarControl
Dim Nouveau21 As CommandBarControl, Nouveau22 As CommandBarControl, Nouveau23 As CommandBarControl
 
On Error Resume Next
Set Nouveau = Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With Nouveau
.Caption = "ma barre"
.FaceId = 317
.BeginGroup = True 'rajoute une barre de séparation devant le menu
End With
 
Set Nouveau10 = Nouveau.Controls.Add(msoControlPopup, , , , True)
With Nouveau10
.Caption = "Sauvegarde"
.Style = msoButtonIconAndCaption
.FaceId = 1790
End With
 
Set Nouveau11 = Nouveau10.Controls.Add(msoControlButton, , , , True)
With Nouveau11
.Caption = "Sauvegarder"
.FaceId = 2648
.Style = msoButtonIconAndCaption
.OnAction = "sauvegarder"
End With
 
Set Nouveau12 = Nouveau10.Controls.Add(msoControlButton, , , , True)
With Nouveau12
.Caption = "Sauvegarder et fermer"
.FaceId = 481
.Style = msoButtonIconAndCaption
.OnAction = "sauvegarderfermer"
End With
 
Set Nouveau20 = Nouveau.Controls.Add(msoControlPopup, , , , True)
With Nouveau20
.Caption = "EMail"
.FaceId = 1675
.Style = msoButtonIconAndCaption
End With
 
Set Nouveau21 = Nouveau20.Controls.Add(msoControlButton, , , , True)
With Nouveau21
.Caption = "EMail demande"
.FaceId = 266
.Style = msoButtonIconAndCaption
.OnAction = "EnvoiEmail"
End With
 
Set Nouveau22 = Nouveau20.Controls.Add(msoControlButton, , , , True)
With Nouveau22
.Caption = "EMail suppression"
.FaceId = 52
.Style = msoButtonIconAndCaption
.OnAction = "EnvoiEmail"
End With
 
Set Nouveau23 = Nouveau20.Controls.Add(msoControlDropdown, , , , True)
With Nouveau23
.Caption = "Messagerie"
.FaceId = 54
.Style = msoComboLabel
.TooltipText = "Choisissez votre logiciel de messagerie"
.OnAction = "messagerie"
.AddItem ("Outlook Express")
.AddItem ("Mozilla Thunderbird")
.AddItem ("Office Outlook")
End With
 
End Sub
Et voici le code pour la macro messagerie (placée dans le module 1) pour récupérer le numéro de la ligne sélectionnée dans la liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Sub messagerie()
Dim client As Long
client = CommandBars(1).Controls(1).ListIndex 'est-ce le bon code?
Select Case client
Case 2
MsgBox ("Firefox")
End Select
End Sub
Nom problème est que je n'arrive pas à récupérer l'indexe. J'ai toujours un message d'erreur. " erreur d'exécution '438' : propriété ou méthode non gérée par cet objet". J'ai essayé plusieurs chose pour ma ligne de code mais rien ne fonctionne.
J'ai du louper quelque chose, mais quoi?
Merci d'avance pour votre aide.