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 :

Créer un onglet de navigation dans le ruban [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Cadre
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut Créer un onglet de navigation dans le ruban
    Bonjour,

    Je cherche en vain depuis plusieurs jours à réaliser mon projet et je sèche sur la partie la plus basique ... remettre à zéro les ComboBox & dropDown de mon ruban.

    La première liste qui fonctionne sans problème mais qui reste sur le choix sélectionné (en dur dans le XML car le classeur contient ses feuilles dès le départ)

    De ce fait, si on choisit dans la liste, la feuille Aide, que l'on change d'onglet et que l'on souhaite de nouveau accèder à la feuille Aide, il faut changer deux fois la liste Go to (une première fois pour quitter le choix Aide, et une seconde fois pour y retourner). J'aimerai du coup, remettre le choix à zéro une fois l'action ChangeCB1 réalisée.

    La seconde liste est dynamique car elle ne doit lister que les feuilles visibles de personnes (prénom nom -> qui contiennent donc toujours un espace)
    Là encore, le choix réalisé reste actif (attention, je débute en VBA et XML donc c'est de la bidouille pour commencer le listing à la feuille 4 (3 visibles + 1 cachée)).

    Par ailleurs, impossible de faire fonctionner vba invalidateContentOnDrop="true" dans mon xml sous peine d'invalider l'onglet en question. Du coup, quand j'ajoute une personne à mon classeur, via une macro séparée ou en ajoutant manuellement la feuille, la liste des personnes ne s'actualise pas, à mon grand désarroi

    A noter que mon classeur contient également une feuille cachée que je ne souhaite pas lister.

    Ci-dessous le code des deux listes (celle qui est dynamique [ListePersonne] et l'autre codée en dur [CB1])

    XML
    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
    <group id="GR1" label="Navigation">
    				<comboBox id="CB1" label="Go to" onChange="ChangeCB1" > 
    				<item id="it1" label="Sommaire" imageMso="AccessTableContacts" /> 
    				<item id="it2" label="Synthèse" imageMso="ChartPlotArea" /> 
    				<item id="it3" label="Aide" imageMso="Help" /> 
    				</comboBox>
    				<dropDown 
                            id="ListePersonne"
                            label="Nom complet"
                            sizeString="WWWWWWWWWWWW"
                            supertip="Permet d'aller directement à la feuille sélectionnée dans la liste déroulante !"
                            getItemCount="ItemCount"
                            getItemLabel="ListItem"
    			getVisible="TesteCondition"
                            onAction="Item_Selected" />
    			</group>
    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
     
    Option Explicit
     
    Sub ItemCount(control As IRibbonControl, ByRef returnedVal)
        Dim lCount As Long
        Dim wksSheet As Worksheet
        'Set mwkbNavigation = ThisWorkbook
        For Each wksSheet In ThisWorkbook.Worksheets
            If wksSheet.Visible = xlSheetVisible And wksSheet.Name Like "* *" Then
                lCount = lCount + 1
            End If
        Next wksSheet
        returnedVal = lCount
    End Sub
    Sub ListItem(control As IRibbonControl, index As Integer, ByRef returnedVal)
        If ThisWorkbook.Worksheets(index + 1).Visible = xlSheetVisible Then
            returnedVal = ThisWorkbook.Worksheets(index + 4).Name
        End If
    End Sub
     
    Sub Item_Selected(control As IRibbonControl, label As String, index As Integer)
            Sheets(ThisWorkbook.Worksheets(index + 4).Name).Select
    End Sub
     
     
    'N'affiche pas la liste des personnes si le nombre d'onglets est inférieur à 4
    Sub TesteCondition(control As IRibbonControl, ByRef returnedVal)
        returnedVal = ThisWorkbook.Sheets.Count > 4
    End Sub
     
    Sub ChangeCB1(control As IRibbonControl, text As String)
        Sheets(text).Activate
    End Sub
    Depuis le temps que je galère avec différents tests : combobox, dropDown, ... je m'en remets aux dieux du XML et VBA pour m'aider à corriger mes quelques problèmes

    Merci

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    excel 2010/2016, j'ai eu un petit souci avec les nom d'onglet avec espace,
    si un seul avait un espace, la liste restait vide, et quand je modifiais avec un "_" la liste fonctionnait correctement !!!???

    je trouve le code et je reviens..

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    avec 2016, un click droit entre les flèches et tu as ta navigation avec les espaces !!!
    Nom : Capture7.PNG
Affichages : 1296
Taille : 40,4 Ko
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  4. #4
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    capture du bouton et de la liste :
    Nom : Capture8.PNG
Affichages : 1317
Taille : 33,7 Ko
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  5. #5
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    pour le code VBA

    dans ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Open()
        Call InitMenuRuban
    End Sub
    dans un module (SYSTEM_Menu_Ribbon):
    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
     
    Public objRuban As IRibbonUI
    Public Ribbon As IRibbonUI
    Public NewLabel_List As String
    Public boolResult As Boolean
    Public boolResult_15 As Boolean
     
    '**********************************************************************************
    'Callback for customUI.onLoad
    Sub OnLoadRubanCharge(Ribbon As IRibbonUI)
        Set objRuban = Ribbon
        Call InitMenuRuban
    End Sub
     
     
    Sub InitMenuRuban()
        'Rafraichit le Menu RUBAN
        boolResult = True
        boolResult_15 = True: If Not objRuban Is Nothing Then objRuban.InvalidateControl "ListDynamique"
    End Sub
    '#################################################################################ListDynamique
    'Callback for ListDynamique getContent
    Public Sub CreationMenuDynamique(control As IRibbonControl, ByRef returnedVal)
        'ouverture de la balise menu
        returnedVal = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" itemSize=""normal"">"
        'List les feuilles de calcul du classeur actif
        returnedVal = returnedVal & ListFeuilles(ActiveWorkbook)
        'fermeture de la balise
        returnedVal = returnedVal & "</menu>"
    End Sub
     
     
    'Callback for ListDynamique getEnabled
    Sub ListDynamique_Enabled(control As IRibbonControl, ByRef returnedVal)
        returnedVal = boolResult_15
    End Sub
     
     
    Public Sub ActivationFeuille(control As IRibbonControl)
        'Active la feuille sélectionnée lorsque vous cliquez sur un nom dans le menu.
        Sheets(control.Tag).Activate
    End Sub
    dans un module (SYSTEM_Menu_Fonction):
    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
     
     
    '#################################################################################ListDynamique
    Public Function ListFeuilles(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
        ListFeuilles = strTemp
    End Function
     
     
    Public Function CreationAttribut(strAttribut As String, Donnee As String) As String
        CreationAttribut = strAttribut & "=" & Chr(34) & Donnee & Chr(34)
    End Function
    à suivre le code xml..
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    pour éditer la partie xml, j'utilise "OfficeCustomUIEditorSetup_2007-2010"

    pour la partie "insert image"
    Nom : Capture9.PNG
Affichages : 1298
Taille : 72,2 Ko

    l'image qui du bouton est : Onglet_Selection
    j'ai créé cette image avec paint et modifié l'ombre avec un logiciel icone

    pour le code xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoadRubanCharge"> 
    <ribbon startFromScratch="false">
    <tabs>
     
    <group id="GrpWORK" label="WORK">
    	<dynamicMenu id="ListDynamique" label="Onglet" getEnabled="ListDynamique_Enabled"  getContent="CreationMenuDynamique" invalidateContentOnDrop="true" size="large" image="Onglet_Selection" screentip=" " supertip=" " tag=" " />
    </group>
     
    </tab>
    </tabs>
    </ribbon>
    </customUI>
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

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

Discussions similaires

  1. [XL-2010] Créer un nouvel onglet dans le ruban par macro
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/05/2018, 13h25
  2. Réponses: 2
    Dernier message: 07/03/2016, 17h36
  3. [A-00] Navigation dans des onglets
    Par ellak dans le forum IHM
    Réponses: 3
    Dernier message: 10/10/2008, 07h32
  4. [E-07] Rendre un onglet visible ou non dans le ruban
    Par zit_zit dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 29/09/2008, 20h00
  5. [Excel] Créer un onglet
    Par namstou3 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/02/2008, 14h18

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