Bonjour à tous,
Je me suis lancé dans la personnalisation des menus en testant la mise en oeuvre d'un exemple donné par SilkyRoad dans son article de fond sur le sujet.
Malheureusement les résultats ne sont pas concluants et je n'arrive pas à déceler où çà pèche !

Voici le code XML :

Code xml : 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
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
    <tabs>
        <tab id="Ongletperso" label="ONGLETS">
            <group id="GR01" label="Liste">
            <dynamicMenu id="ListeDynamique"
                label="ONGLETS"
                getContent="CreationMenuDynamique"
                invalidateContentOnDrop="true"
                size="normal"
                imageMso="PrintTitles"/>
            </group>
        </tab>
    </tabs>
</ribbon>
</customUI>

Voici le code VBA :

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
Option Explicit
 
'Callback for ListeDynamique getContent
'Procédure pour construire le menu dynamique
Public Sub CreationMenuDynamique(ctl As IRibbonControl, ByRef content)
    'ouverture de la balise menu
    content = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">"
 
    'liste les feuilles de calcul du classeur actif
    content = content & ListeFeuilles(ActiveWorkbook)
 
    'liste les feuilles graphiques du classeur actif
    content = content & ListeCharts(ActiveWorkbook)
 
    'fermeture de la balise
    content = content & "</menu>"
End Sub
 
 
 
Private Function ListeFeuilles(Wb As Workbook) As String
    Dim strTemp As String
    Dim Ws As Worksheet
 
    ' Insertion d'un titre de menu
    strTemp = "<menuSeparator id=""Feuilles"" title=""Feuilles""/>"
 
    ' ajoute un bouton dans le menu pour chaque feuille du classeur
    For Each Ws In Wb.Worksheets
        strTemp = strTemp & _
            "<button " & _
            CreationAttribut("id", "Bt" & Ws.Name) & " " & _
            CreationAttribut("label", Ws.Name) & " " & _
            CreationAttribut("tag", Ws.Name) & " " & _
            CreationAttribut("onAction", "ActivationFeuille") & "/>"
    Next
 
    ListeFeuilles = strTemp
End Function
 
 
'Liste les feuilles graphiques contenues dans le classeur
Private Function ListeCharts(Wb As Workbook) As String
    Dim strTemp As String
    Dim Ch As Chart
 
    If Wb.Charts.Count = 0 Then Exit Function
 
    strTemp = "<menuSeparator id=""charts"" title=""charts""/>"
 
    For Each Ch In Wb.Charts
        strTemp = strTemp & _
            "<button " & _
            CreationAttribut("id", "Bt" & Ch.Name) & " " & _
            CreationAttribut("label", Ch.Name) & " " & _
            CreationAttribut("tag", Ch.Name) & " " & _
            CreationAttribut("onAction", "ActivationFeuille") & "/>"
    Next
 
    ListeCharts = strTemp
End Function
 
 
Function CreationAttribut(strAttribut As String, Donnee As String) As String
    CreationAttribut = strAttribut & "=" & Chr(34) & Donnee & Chr(34)
End Function
 
 
 
'Active la feuille sélectionnée lorsque vous cliquez sur un nom
'dans le menu.
Sub ActivationFeuille(control As IRibbonControl)
    Sheets(control.Tag).Activate
End Sub
Et voici le résultat :

Nom : 2014-05-11_19h31_02.jpg
Affichages : 237
Taille : 28,5 Ko

Seules les entêtes sont générées, mais la liste dynamique reste vide !

Merci d'avance de votre aide et de vos yeux éclairés !

Philippe