Microsoft 365 Création d'un nouvel onglet du ruban en vba et y attacher 4 macros complémentaires (MAC et PC)

RyuAutodidacte

XLDnaute Impliqué
Bonjour,

j'ai beau chercher partout mais je ne trouve de solution pour le moment …

Comme l'onglet "Acceuil" qui existe dans le ruban, je cherche à pourvoir créer par vba un nouvel onglet "TOTO" et y insérer 4 macros, provenant d'un complément Excel d'un fichier xlam déjà insérer par macro :
VB:
Sub Add_AddIn() 'version Mac (peut être PC aussi pouvez vous confirmer SVP)
Dim addInPath As String
    addInPath = "MonChemin/TEST.xlam"
    AddIns.Add addInPath
    AddIns("TEST").Installed = True '
End Sub
Le but est de pourvoir faire une automatisation d'installation sur plusieurs utilisateurs Mac et PC

merci d'avance pour vos réponses

Ryu
 

patricktoulon

XLDnaute Barbatruc
j'oubliais
il faut activer l'accèes approuvé
sur 2013 c'est
centre de gestion de la confidentialité
paramètres de la gestion de confidentialité
paramètres des macros
et dans le volet a droite cocher "accès approuvé au model d'object du projet vba

vue des option vba.JPG



les références supplémentaires à cocher dans vbe
microsoft XML,3.0
microsoft visual basic for application Extensibility 5.0
microsof.shell Control And Automation
 

RyuAutodidacte

XLDnaute Impliqué
re
tient donc??!!
il va falloir faire une recherche sur ce point

2d kado
bon tu es prêt?
prend ce fichier met le dans un dossier vide
lance le
click sur le bouton de la feuille
dans la boite de dialog fichier qui va s'ouvrir choisi un de nos fichier custom valide
attend
ferme le message qui te dis que c'est terminé
regarde dans le dossier SURPRISE!!!!!
C'est mortel il a fait tout le travail tout seul en 2 clic 👍👍👍👍👍 bravo
 

RyuAutodidacte

XLDnaute Impliqué
1686237365887.png


avance dans les recherches de fabrication du xml test de codes
pour créer les lignes correctement à partir du tableau
VB:
    VA = Range("MyXML[[BALISE TYPE]:[ATTRIBUT 6]]").Value
    For i = LBound(VA) To UBound(VA)
        V = Replace(Replace(Application.Trim(Join(Application.Index(VA, i, [{3,4,5,6,7,8}]))), " />", "/>"), " >", ">")
        Debug.Print V
'        If InStrRev(V, "/>") = 0 Then
'            Debug.Print V
'            Debug.Print "Fermeture balise à prendre en compte"
'        End If
    Next
XML:
Résultat de construction des lignes (pas la construction du xml pour l'instant) :

<tab id="myTabID_1" label="NameLabelTab">
<group id ="myGroupID_1" label="NameLabelGroup">
<button id="myButtonID_1" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<button id="myButtonID_2" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<button id="myButtonID_3" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<group id ="myGroupID_2" label="NameLabelGroup">
<box id="myBoxID_1" boxstyle="vertical/horizontal">
<button id="myButtonID_4" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<separator id="mySeparatorID_1"/>
<button id="myButtonID_5" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<separator id="mySeparatorID_2"/>
<buttonGroup id="myButtonGroupID_1">
<button id="myButtonID_6" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>
<button id="myButtonID_7" label="NameLabelButton" onAction="MacroName" imageMso="NameImage" size="large"/>

Pour repérer les partie dont on doit fermer les groupes (test de codes) :
VB:
    VA = Range("MyXML[[BALISE TYPE]:[ATTRIBUT 6]]").Value
    For i = LBound(VA) To UBound(VA)
        V = Replace(Replace(Application.Trim(Join(Application.Index(VA, i, [{3,4,5,6,7,8}]))), " />", "/>"), " >", ">")
'        Debug.Print V
        If InStrRev(V, "/>") = 0 Then
            Debug.Print V
            Debug.Print "Fermeture balise à prendre en compte"
        End If
    Next
XML:
<tab id="myTabID_1" label="NameLabelTab">
Fermeture balise à prendre en compte
<group id ="myGroupID_1" label="NameLabelGroup">
Fermeture balise à prendre en compte
<group id ="myGroupID_2" label="NameLabelGroup">
Fermeture balise à prendre en compte
<box id="myBoxID_1" boxstyle="vertical/horizontal">
Fermeture balise à prendre en compte
<buttonGroup id="myButtonGroupID_1">
Fermeture balise à prendre en compte

ca va être l'heure de la multi-dimension :D
 
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
re
Maintenant tu sais pourquoi j'ai insisté au départ sur le point "savoir le faire à la main"
tout simplement par ce que comme ca avec les bon outils dans VBA tu sais l'automatiser ;)


tu a déjà de quoi te faire des petits ruban simple mais sympa
Re
on les a tous vu ?? si non, il reste lesquelles ?

Il me semble qu'il y a aussi celui que l'on met dans le clic droit de la souris non ??
 

patricktoulon

XLDnaute Barbatruc
re
non il y en a encore pas mal a faire
entraine toi a en faire des simples
compile les avec mon module

tiens les splitButton
je te montre les 3 différentes facon de les faire

  1. le dropbouton petit et le menu gros et sans texte
  2. le drop bouton peit ainsi que le menu et sans texte
  3. le dropbouton gros ainsi que le menu avec texte
VB:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="tab-1" label="Onglet_0">
                <group id="group-0" label="premiergroup">
                    <box id="box_1" boxStyle="vertical">
                        <splitButton id="splitButton_1">
                            <menu id="menu_1" itemSize="large">
                                <button id="button_1" onAction="button_1_Click" imageMso="SelectionPane"/>
                                <button id="button_2" onAction="button_2_Click" imageMso="WebGoBack"/>
                                <button id="button_3" onAction="button_3_Click" imageMso="ObjectBringToFront"/>
                            </menu>
                        </splitButton>
                    </box>
                    <separator id="separator_1"/>
                    <separator id="separator_2"/>
                    <separator id="separator_3"/>
                    <splitButton id="splitButton_2">
                        <menu id="menu_2">
                            <button id="button_4" onAction="button_4_Click" imageMso="ResearchPane"/>
                            <button id="button_5" onAction="button_5_Click" imageMso="ThemeBrowseForThemes"/>
                            <button id="button_6" onAction="button_6_Click" imageMso="XmlDataRefresh"/>
                        </menu>
                    </splitButton>
                    <separator id="separator_4"/>
                    <separator id="separator_5"/>
                    <separator id="separator_6"/>
                    <splitButton id="splitButton_3" size="large">
                        <menu id="menu_3" itemSize="large">
                            <button id="button_7" onAction="button_7_Click" imageMso="ObjectBorderOutlineColorMoreColorsDialog" label="toto"/>
                            <button id="button_8" onAction="button_8_Click" imageMso="ViewDocumentActionsPane" label="Tata"/>
                            <button id="button_9" onAction="button_9_Click" imageMso="LabelInsert" label="loulou"/>
                        </menu>
                    </splitButton>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

la règle a ne pas déroger
pas d'attribut onaction a la balise "splitButton"JAMAIS!!!!
pas d'attribut size aux splitbuton si il est ailleurs que dans un group

pas d'attribut size aux boutons a l’intérieur du menu(enfant de splitbutton)
si on le veux gros le menu c'est l'attribut "itemsize" dans la balise menu

si ces règles ne sont pas respectées alors le ruban est en erreur et donc n'apparait pas
compile toi le et regarde
 

patricktoulon

XLDnaute Barbatruc
re
oui c’était pour bien les séparer pour que tu ai un visuel bien clair
tu peux les enlever si tu veux
tu a vu aussi que je met le premier dans un box pour qu'il soit tout seul dans sa colonne
bis répétita ""les box servent à aligner des controls" ;)

je te fait les exo pour les balises menu là je reviens tout à l'heure
j'oubliais un truc
quand tu click sur l'icon d'un splitbutton ca renvoie l'appel vers le premier bouton dans le menu
pour développer il faut clicker sur le petit triangle
 

RyuAutodidacte

XLDnaute Impliqué
il faudra que le le fasse avec un vrai treeview un jour pour le fun
LOL
C'est déjà bien il fallait le faire comme ça, il es super bien fait

PS : l'ordre de tes boutons à droite dans ton creator suivent la construction logique du XML customUI ?
car c'est ce que je cherche à faire pour mon Array
j'ai fait cela :
VB:
B = Array("TAB", "GROUP", "BUTTONGROUP", "BOX", "SPLITBUTTON", "MENU", "BUTTON", "TOGGLEBUTTON", "SEPARATOR")
 

patricktoulon

XLDnaute Barbatruc
re
oui l'ordre c'est surtout pour les container

allez on attaque les menus
alors ici on a un menu à theme
c'est a dire un menu avec des titres de separation
le xml
XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="tab-0" label="exemple">
                <group id="group-0" label="un menu avec titre theme">
                    <menu id="menu_0" label="du sport">
                        <menuSeparator id="Sepmenu_0" title="Sport avec Ballon"/>
                        <button id="button_0" label="foot" onAction="foot1_click" imageMso="InkColorMoreColorsDialog"/>
                        <button id="button_1" label="basket" onAction="basket1_click" imageMso="ObjectBorderOutlineColorMoreColorsDialog"/>
                        <menuSeparator id="Sepmenu_1" title="Sport avec Balle"/>
                        <button id="button_2" label="tennis" onAction="tennis1_click" imageMso="ShapeOval"/>
                        <button id="button_3" label="pingpong" onAction="pingpong1_click" imageMso="ShapeOval"/>
                    </menu>
                </group>
                <group id="group_2" label="le même en plus gros">
                    <menu id="menu_1" label="du sport" itemSize="large">
                        <menuSeparator id="Sepmenu_2" title="Sport avec ballon"/>
                        <button id="button_4" label="foot" onAction="foot_click" imageMso="ObjectBorderOutlineColorMoreColorsDialog"/>
                        <button id="button_5" label="basket" onAction="basket_click" imageMso="ObjectBorderOutlineColorMoreColorsDialog"/>
                        <menuSeparator id="Sepmenu_3" title="Sport avec balle"/>
                        <button id="button_6" label="Tennis" onAction="Tennis_click" imageMso="ShapeOval"/>
                        <button id="button_7" label="Pingpong" onAction="Pingpong_click" imageMso="ShapeOval"/>
                    </menu>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

je te laisse regarder
je te donne pas les callback tu a mon compilateur maintenant
LOL
 

patricktoulon

XLDnaute Barbatruc
ben en fait je l'ai fait il y a 4 ans déjà
mais sur cette version je vais plus vite
je sais pas si tu l'avais vu mon ancien creator beta3 2020
il est presque complet mais plein de petits bug sans gravité pour celui qui l'a développé c'est à dire moi
sauf qu'avec celui la je ne compilait pas les callbacks

l je prend le temps sur la version 2023 et selon ce que l'utilisateur fait si c'est pas bon l'app l'en empêchera

démo de l'ancienne version 2020 beta 3
tout les exo que je te donne je les fait avec
demo.gif
 

patricktoulon

XLDnaute Barbatruc
allez un dernier pour aujourd'hui

le menu en cascade
XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<customUI azerty="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab visible="true" id="tab0" label="onglet0">
                <group id="group_1" label="exemple menu en cascade">
                    <menu id="menu-0" label="menuX_0">
                        <button id="button_0" label="item menu 1" onAction="item_menu_1_click" imageMso="ActiveXImage"/>
                        <button id="button_1" label="item menu 2" onAction="item_menu_2_click" imageMso="ObjectBringToFront"/>
                        <button id="button_2" label="item menu 3" onAction="item_menu_3_click" imageMso="ObjectBringForward"/>
                        <menu id="menu-1" label="sub menu 1" imageMso="ObjectBorderOutlineColorMoreColorsDialog">
                            <button id="button_3" label="item 1" onAction="item_1_click" imageMso="ObjectFormatDialog"/>
                            <menu id="menu-2" label="sub  menu  2" imageMso="ObjectBorderOutlineColorMoreColorsDialog">
                                <button id="button_6" label="sub  sub item1" onAction="sub__sub_item1_click" imageMso="MacroSecurity"/>
                                <button id="button_7" label="sub sub otem 2" onAction="sub_sub_otem_2_click" imageMso="MacroRecord"/>
                                <menu id="menu_3" label="sous menu " imageMso="ObjectBorderOutlineColorMoreColorsDialog">
                                    <button id="button_8" label="sous item 1" onAction="sous_item_1_click" imageMso="Paste"/>
                                    <button id="button_9" label="sous item 2" onAction="sous_item_2_click" imageMso="QueryParameters"/>
                                    <button id="button_10" label="sous item 3" onAction="sous_item_3_click" imageMso="SelectCurrentRegion"/>
                                </menu>
                            </menu>
                            <button id="button_4" label="item 2" onAction="item_2_click" imageMso="SendCopySelectNames"/>
                            <button id="button_5" label="item 3" onAction="item_3_click" imageMso="WatchWindow"/>
                        </menu>
                    </menu>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

va y Bil compile
🤣
 

Statistiques des forums

Discussions
314 017
Messages
2 104 579
Membres
109 081
dernier inscrit
Vio21