IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Personnalisation ruban | Contrôle DynamicMenu [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 77
    Par défaut Personnalisation ruban | Contrôle DynamicMenu
    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 : 243
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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 77
    Par défaut
    Bonjour,
    Il semble que le problème rencontré provienne du nom des onglets comprenant un espace.
    Il faut donc prévoir dans le code une clause les supprimant :

    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
    Private Function ListeFeuilles(Wb As Workbook) As String
        Dim strTemp, BtId 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
            BtId = "Bt" & Replace(Ws.Name, " ", "")
            strTemp = strTemp & Chr(10) & _
                "<button " & _
                CreationAttribut("id", BtId) & " " & _
                CreationAttribut("label", Ws.Name) & " " & _
                CreationAttribut("tag", Ws.Name) & " " & _
                CreationAttribut("onAction", "ActivationFeuille") & "/>"
        Next
     
        ListeFeuilles = strTemp
    End Function
    Si SilkyRoad est à l'écoute, peut-être pourrait-il compléter son exemple ?

    Bien cordialement

    Philippe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Ruban - Contrôles
    Par acrabouiboui dans le forum Excel
    Réponses: 2
    Dernier message: 25/01/2012, 16h43
  2. Personnaliser le contrôle wizard
    Par brinx dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 29/08/2011, 12h35
  3. Personnaliser un contrôle de base
    Par webrider dans le forum VB.NET
    Réponses: 10
    Dernier message: 08/06/2011, 13h56
  4. [XL-2010] personnaliser ruban 2010
    Par gregory1954 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/05/2011, 19h52
  5. [WD-2010] Personnalisation ruban / backstage
    Par moustik dans le forum Word
    Réponses: 1
    Dernier message: 03/04/2011, 03h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo