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

Excel Discussion :

Utilisation des menus dynamique dans le ruban excel [XL-2016]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable Qualité
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Utilisation des menus dynamique dans le ruban excel
    Bonjour à toutes et tous,
    Je me suis lancer dans la personnalisation du ruban excel, avec l'aide des tutoriels de SilkyRoad, mais je bloque sur un problème avec le menu dynamique.

    Je m'explique, je veux créer un premier menu dynamique dans lequel sera imbriqué, à ce jour, une vingtaine de sous-menus dynamique eux aussi et dans ces sous-menus, j'aurais dans chacun entre 5 et 20 boutons.
    L'exemple fourni dans le tutoriel marche très bien , je parvient bien a faire un menu dynamique avec des boutons, mais pas avec des sous-menus dynamiques.

    Est-ce possible et si oui comment ?

    D'avance merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Ton code qui est appelé pour construire ton menu doit reproduire ce type de structure

    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
     
    <menu id="Menu01" label="mon Menu perso" itemSize="normal">
        <toggleButton id="ToggleButton01" label="exemple toggleButton 01" />
        <toggleButton id="ToggleButton02" label="exemple toggleButton 02" />
        <button id="bt01" label="Button01" />
     
            <menu id="SousMenu01" label="Sous Menu 01" itemSize="normal">
                <button id="bt02" label="Button02" />
                <button id="bt03" label="Button03" />
                <button id="bt04" label="Button04" />
     
                <menu id="SousMenu02" label="Sous Menu 02" itemSize="large">
                    <button id="bt05" label="Button05" />
                        <button id="bt06" label="Button06" />
                    </menu>
            </menu>
    </menu>
    Montres nous le code que tu utilises.
    Et si tu peux montre nous aussi la structure que tu utilises pour stocker les informations te permettant d'organiser tes menus (une base dans une feuille?). S'il y a des données confidentielles, place au moins une organisation type bidon juste pour voir comment sont structurées tes données.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable Qualité
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut Qwaz
    Le code que j'ai créer pour mon ruban est le suivant :
    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
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="ChargeRuban">
    	<ribbon>
    		<tabs>
    			<tab id="customTab" label="TEST">
    				<group id="Group1" label="Essais menu dynamique">
    					<dynamicMenu id="LD1"
    						label="Liste risque"
    						getContent="CreationMD1"
    						invalidateContentOnDrop="true"
    						size="normal"/>
    				</group>
    			</tab>
    		</tabs>
    	</ribbon>
    </customUI>
    Le but ensuite est de générer dans ce menu dynamique d'autre menu dynamique qui eux contiendrons des boutons.
    Les titres des sous-menu dynamique correspondent à la ligne 1 de la feuille excel contenant les données, puis les lignes suivante de chaque colonne correspondent aux boutons que je voudrais générer.
    Nom : Capture.PNG
Affichages : 717
Taille : 27,4 Ko
    En espérant être plus clair.

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Et qu'à tu écris dans CreationMD1 ?


    [Edit]
    Je ne peux pas tester, je n'ai pas envie de faire les modifications sur le XML.

    Voir le fichier en PJ

    Pour ceux qui n'ouvre pas les fichiers:
    Le code est le suivant
    Avec un tableau structuré nommé "Tab_Menu" dans la Feuil1 et les données organisées comme indiqué plus haut

    Dans un module
    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
    Option Explicit
     
    Public Sub CreationMD1(ctl As IRibbonControl, ByRef Content)
    Dim TabColumn As ListColumn
    Dim rgBouton As Range
     
        'ouverture de la balise menu
        Content = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">"
     
        'On pointe le tableau contenant les menu
        With Feuil1.ListObjects("Tab_Menu")
     
            'On boucle sur les colonnes du tableau
            For Each TabColumn In .ListColumns
     
                'On utilise le nom de la colonne comme sous menu '<menu id="Menu01" label="mon Menu perso" itemSize="normal">
                Content = Content & "<menu " & _
                    CreationAttribut("id", TabColumn.Name) & " " & _
                    CreationAttribut("label", TabColumn.Name) & " " & _
                    "itemSize=""normal"">"
     
                'On boucle sur le contenu de la colonne
                For Each rgBouton In .DataBodyRange
     
                    'On teste que le contenu n'est pas vide
                    If rgBouton.Value <> "" Then
                        'On ajoute le bouton
                        'Je ne met que les paramètre de base à toi de rajouter ceux dont tu auras besoin (onAction pas exemple)
                        Content = Content & "<button " & " " & _
                            CreationAttribut("id", rgBouton.Value) & " " & _
                            CreationAttribut("label", rgBouton.Value) & "/>"
                    End If
                Next
     
                'On ferme la balise menu
                Content = Content & "</menu>"
            Next
        End With
     
    End Sub
     
     
    Function CreationAttribut(strAttribut As String, Donnee As String) As String
        CreationAttribut = strAttribut & "=" & Chr(34) & Donnee & Chr(34)
    End Function
    [/Edit]

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable Qualité
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut,
    j'ai fait un essais avec le code que tu ma donné, mais j'ai un message d'erreur à la ligne 11 : "With Feuil1.ListObjects("Tab_Menu")", qui me dit que l'indice n'appartient pas à la sélection.
    Ma feuille contenant les données est bien la Feuil1, et j'ai créer via le gestionnaire de nom "Tab_Menu" et c'est peut-être là mon problème mais je ne vois pas la solution. Étant curieux et têtu, j'ai essayer d'adapter ton code autrement (voir ci-dessous, sur 4 lignes et 4 colonnes), mais je n'obtient pas tout à fait ce que je voudrais, j'ai bien les menus correspondant au titre de mes colonnes et les boutons, mais ces derniers ne sont pas dans les menus qui reste grisé.
    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
    Sub CreationMD1(control As IRibbonControl, ByRef Content)
        Dim Col, Lig As Variant
        'ouverture de la balise menu
        Content = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">"
     
     
        For Col = 2 To 4 Step 1
            'Création du menu en fonction du "titre" de la ligne
            Content = Content & "<menu " & _
            CreationAttribut("id", "BtFA1" & Col) & " " & _
            CreationAttribut("label", Cells(1, Col).Value) & " " & _
            CreationAttribut("tag", Cells(1, Col).Value) & "/>"
            For Lig = 2 To 5
            'Création des boutons de chaque colonne
                Content = Content & "<button " & _
                CreationAttribut("id", "BtFA" & Lig & Col) & " " & _
                CreationAttribut("label", Cells(Lig, Col).Value) & " " & _
                CreationAttribut("tag", Cells(Lig, Col).Value) & "/>"
            Next Lig
        Next Col
     
        'fermeture de la balise
        Content = Content & "</menu>"
     
    End Sub
    Nom : Capture1.PNG
Affichages : 719
Taille : 104,2 Ko

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    j'ai créer via le gestionnaire de nom "Tab_Menu"
    En fait il ne s'agit pas d'une plage nommé à proprement parlé, il s'agit d'un tableau structuré. Tu doit cliquer dans le tableau que tu veux structurer et aller dans le ruban Insertion, Tableau. (attention à la case à cocher qui précise si les entête sont déjà présentes.


    Pour ton code, je pense que le problème vient de la dernière ligne ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Création du menu en fonction du "titre" de la ligne
            Content = Content & "<menu " & _
            CreationAttribut("id", "BtFA1" & Col) & " " & _
            CreationAttribut("label", Cells(1, Col).Value) & " " & _
            CreationAttribut("tag", Cells(1, Col).Value) & "
    Plus exactement du "/>" final qui n'a pas lieu d'être ici, la balise doit restée ouverte pour contenir les bouton, elle est fermée ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'fermeture de la balise
        Content = Content & "</menu>"
    Du coup je m’aperçoit que je n'ai pas fermé celle du menu principal
    Voila la correction de mon code
    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
    Sub CreationMD1(ctl As IRibbonControl, ByRef Content)
    Dim TabColumn As ListColumn
    Dim rgBouton As Range
     
        'ouverture de la balise menu
        Content = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">"
     
        'On pointe le tableau contenant les menu
        With Feuil1.ListObjects("Tab_Menu")
     
            'On boucle sur les colonnes du tableau
            For Each TabColumn In .ListColumns
     
                'On utilise le nom de la colonne comme sous menu '<menu id="Menu01" label="mon Menu perso" itemSize="normal">
                Content = Content & "<menu " & _
                    CreationAttribut("id", TabColumn.Name) & " " & _
                    CreationAttribut("label", TabColumn.Name) & " " & _
                    "itemSize=""normal"">"
     
                'On boucle sur le contenu de la colonne
                For Each rgBouton In .DataBodyRange
     
                    'On teste que le contenu n'est pas vide
                    If rgBouton.Value <> "" Then
                        'On ajoute le bouton
                        'Je ne met que les paramètre de base à toi de rajouter ceux dont tu auras besoin (onAction pas exemple)
                        Content = Content & "<button " & " " & _
                            CreationAttribut("id", rgBouton.Value) & " " & _
                            CreationAttribut("label", rgBouton.Value) & "/>"
                    End If
                Next
     
                'On ferme la balise du sous-menu
                Content = Content & "</menu>"
            Next
        End With
     
        'On ferme la balise menu principal
        Content = Content & "</menu>"
     
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable Qualité
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour
    Effectivement dans mon code, il y avait une erreur de fermeture de la balise menu.
    Après correction cela fonctionne parfaitement, je n'ai plus qu'à faire en sorte qu'il prenne bien tout mes données.

    Je mets donc cette discutions comme résolue.

    Qwaz merci de ton aide et tu temps consacré.

    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
    Sub CreationMD1(control As IRibbonControl, ByRef Content)
        Dim Col, Lig As Variant
        'ouverture de la balise menu
        Content = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">"
     
     
        For Col = 2 To 4 Step 1
            'Création du menu en fonction du "titre" de la ligne
            Content = Content & "<menu " & _
            CreationAttribut("id", "BtFA1" & Col) & " " & _
            CreationAttribut("label", Cells(1, Col).Value) & " " & _
            CreationAttribut("tag", Cells(1, Col).Value) & ">"
     
            For Lig = 2 To 5
            'Création des boutons de chaque colonne
                Content = Content & "<button " & _
                CreationAttribut("id", "BtFA" & Lig & Col) & " " & _
                CreationAttribut("label", Cells(Lig, Col).Value) & " " & _
                CreationAttribut("tag", Cells(Lig, Col).Value) & " " & _
                CreationAttribut("onAction", "AjoutDonneesFA") & "/>"
            Next Lig
        'fermeture de la balise
        Content = Content & "</menu>"
        Next Col
     
     
        'fermeture du menu principal
        Content = Content & "</menu>"
     
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2011, 19h30
  2. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  3. Réponses: 5
    Dernier message: 22/08/2005, 16h48
  4. Utiliser des Assembly .Net dans Visual C++ 6.0
    Par nitram dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 09h05

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