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
 

RyuAutodidacte

XLDnaute Impliqué
Hello Patrick,
J'en suis au tout début, et comme je te disais hier, je suis rentré en pleine grosse production, et du peu que j'ai vu j'ai pas vraiment capter pour l'instant (c'est tout nouveau pour moi ce sujet)
par contre je ne vois pas ou tu as mis les explications :
ok demain je t'expliquerais plus en détail l'astuce
Je veux bien les explications stp et mode d'emploi si c'est possible
C'est pas tous les jours que j'utilise PC
;)
 

RyuAutodidacte

XLDnaute Impliqué
Re,
OK j'ai tester, j'ai trouver la macro à lancer en 1er : Sub TestUIUI()
Le principe est bien et c'est bien réalisé 👍

Par contre … par rapport à mes besoins :

1 ) C'est un fichier contenant des macros (classeurtestcustomuidynamique.xlsm)
=> Hors ce que je vais fournir c'est un fichier xlsx

2 )
Les Macro apparaissent bien dans classeurtestcustomuidynamique.xlsm et sur tous les onglets les macros test marchent pour ce Classeur
"Mon premier onglet" avec macros apparait sur les autres classeurs si j'en fait des nouveaux et si j'en ouvrent des existant
=> mais les macros ne marchent pas sur les autres classeurs autre que classeurtestcustomuidynamique.xlsm

3 )
Quand je quitte Excel puis le redémarre, l'onglet "Mon premier onglet" n'est plus actif
=> Or j'ai besoin que cette onglet soit actif dans l'application Excel tout le temps et pour tout classeur ouvert afin d'y appliquer les macros mis en complément xlam

Vu que je suis en pleine prod pas le temps d'aller plus loin aujourd'hui (je verrai ce soir ou demain)
En tout cas le principe est bien ;)
 

RyuAutodidacte

XLDnaute Impliqué
Aïe Bad news :(
Je me pause une question qd même, lorsque l'on modifie le Ruban Manuellement comme ci-dessus :
1683794175985-png.1170008

il faut bien que Excel l'enregistre qq part dans les préférences de l'application (fichier à un endroit spécifique du système … c'est peut être un XML aussi ?) et peut être que cette préférence est modifiable … Oui/Non ????
 

patricktoulon

XLDnaute Barbatruc
re
ryu allons allons
comment veux tu dans un xlsx qu'un bouton perso appelle une macro?
alors oui quand tu le modifie mano mano il ajoute un xml dans le zip du fichier lui même
et le xml ribbon UI QUAT dans le chemin que j'utilise dans l'astuce

mais ça ne sert strictement a rien puisque pas de macro dans un xlsx

tu peux tourner ça dans tout les sens tu n'a pas beaucoup de choix
soit ton fichier sera un xlsM soit tu devra distribuer un xlaM qui sera activé tout le temps dans chaque pc de tes utilisateurs
je ne vais pas parler du XLSB car c'est la même chose il faudra le distribuer et remplacer l'existant dans chaque pc
 

RyuAutodidacte

XLDnaute Impliqué
Re Patrick,

Soit je me suis mal exprimé, soit tu as mal compris
test => je l'ai fait sur mac mais testé sur PC aussi (pas les droit Admin pour installé LiceCap)
quand tu le modifie mano mano il ajoute un xml dans le zip du fichier lui même
Je peux créer manuellement aussi bien sur PC que MAC un onglet puis un groupe et y attacher une macro xlam sans enregistrer de fichier => ici pas de xml dans le zip du fichier lui même
mais ça ne sert strictement a rien puisque pas de macro dans un xlsx
Pas besoin de macro avec le xlsx car je peux la lancer depuis l'application Excel via l'onglet+groupe+macro que j'avais créer manuellement
C'est accessible sur un document non enregistré, un xlsx que j'ouvre, je peux quitter l'application Excel, la réouvrir plus tard mon onglet+groupe+macro seront toujours à dispo (comme un raccourcis) et pour n'importe quel document dont la macro peut servir.
soit ton fichier sera un xlsM soit tu devra distribuer un xlaM qui sera activé tout le temps dans chaque pc de tes utilisateurs
Et oui en effet comme je l'ai dit au au début de mon poste je me sers d'un xlam pour chaque user PC activé tout le temps (je t'ai donné plus de précision par la suite avec une capture

Donc si je peux créer manuellement un onglet+Groupe/Macro qui ne sont pas associés à un fichier,
cela veut dire que c'est enregistré dans les préférences de l'application Excel et qu'il a garder la configuration du ruban dans un fichier de préférence de l'utilisateur pour l'application Excel
celui-ci est peut être un xml se trouvant qq part dans le système => … oui/ non ?
As tu une idée sur le sujet … ?
Si c'est le cas il est peut être modifiable ? en réécriture ?

1684963467831.png

1684963510301.png
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour ryu
comme je te l'ai dis le xml est enregistré dans le dossier que j'utilise dans mon astuce
je reprends de zéro
1 ° je crée un xlam pour l'occasion avec 4 sub test(1,2,3,4)
VB:
Sub test1()
MsgBox "mamacro xlam 1"
End Sub
Sub test2()
MsgBox "mamacro xlam 2"
End Sub

Sub test3()
MsgBox "mamacro xlam 3"
End Sub

Sub test4()
MsgBox "mamacro xlam 4"
End Sub

2° je l'enregistre dans le dossier des addins et je ferme excel
3° j'ouvre un nouveau fichier xl

4° je vais dans option et j'active mon xlam

5° dans le ruban je fait (mano mano )mon nouvel onglet
'visiblement ça tu sais faire

1684997298353.png


resultat
1684997401839.png


terminé

alors allons voir maintenant dans le dossier que j'ai cité précédemment dans la discussion
ha!!! mais que vois-je là ExcelOfficeUI
1684997548880.png


voyons voir ce qu'il y a dans ce fichier
XML:
<mso:customUI xmlns:x1="http://schemas.microsoft.com/office/2009/07/customui/macro" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
<mso:ribbon>
<mso:qat/>
<mso:tabs>
<mso:tab id="mso_c3.115169" label="mon onglet perso" insertBeforeQ="mso:TabAddIns">
<mso:group id="mso_c4.115169" label="mes macro du xla" autoScale="true">
<mso:button idQ="x1:C:_Users_patrick1_AppData_Roaming_Microsoft_AddIns_MacroXLAruban.xlam_test1_0_159DC0" label="toto" imageMso="ListMacros" onAction="C:\Users\patrick1\AppData\Roaming\Microsoft\AddIns\MacroXLAruban.xlam!test1" visible="true"/>
<mso:button idQ="x1:C:_Users_patrick1_AppData_Roaming_Microsoft_AddIns_MacroXLAruban.xlam_test2_1_159DD0" label="titi" imageMso="ListMacros" onAction="C:\Users\patrick1\AppData\Roaming\Microsoft\AddIns\MacroXLAruban.xlam!test2" visible="true"/>
<mso:button idQ="x1:C:_Users_patrick1_AppData_Roaming_Microsoft_AddIns_MacroXLAruban.xlam_test3_2_159DD0" label="fifi" imageMso="ListMacros" onAction="C:\Users\patrick1\AppData\Roaming\Microsoft\AddIns\MacroXLAruban.xlam!test3" visible="true"/>
<mso:button idQ="x1:C:_Users_patrick1_AppData_Roaming_Microsoft_AddIns_MacroXLAruban.xlam_test4_3_159DD0" label="loulou" imageMso="ListMacros" onAction="C:\Users\patrick1\AppData\Roaming\Microsoft\AddIns\MacroXLAruban.xlam!test4" visible="true"/>
</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>
j'attire ton attention sur le ".Onaction " des boutons ou l'on vois bien le chemin complet de la macro vers le xla
et bien tant que ce fichier reste dans ce dossier tu a ton onglet

conclusion
il me suffit de sauvegarder ce fichier
de changer le nom d'utilisateur dans les chemin macro et de l'installer dans le pc des utilisateurs sans passer par les étapes mano mano
c'est exactement l'astuce que j'utilise dans mon fichier précédent
je supprime ce fichier a la fermeture par macro
resultat j'ai un ribbon dynamique

mais tu peut tres bien insérer ce fichier dans le dossier mano mano
il restera tant que tu le supprime pas

résultat final je ferme tout et rouvre un nouveau fichier (donc sans macro)
j'ai bien mon nouvel onglet dans le ruban et les boutons sont fonctionnels
demo.gif



cela dit puisque les macro appelée sont dans le xla je l'aurait fait en customui dans le xla
a partir du moment ou le xla est enclenché l'onglet est présent


voilà tu sais tout sur cette astuce

;)
 

RyuAutodidacte

XLDnaute Impliqué
RE Patrick ;),
Pour lire et écrire ou modifier le fichier Excel.officeUI tu utilises un simple éditeur de texte ? ou tu t'y prends autrement ?
De plus, je me demande si je peux le faire sur Mac et avoir le même résultat sur PC ?
Je ne voudrai pas mettre ce fichier en l'air, tu me conseilles quoi stp ?

Up : De plus j'ai ouvert le fichier Excel.officeUI sur Mac avec Visual Studio Code et il me met le Xml sur une ligne ce qui est pas top ... Une solution pour ça ?
 

RyuAutodidacte

XLDnaute Impliqué
Re,
j'ai fait l'onglet avec les macros manuellement, puis j'ai récupéré le Excel.officeUI,
je l'ai dupliqué, puis j'ai remplacé l'extension du dupli par xml, je l'ai ouvert via internet Explorer
et j'ai récupéré le code ci-dessous
j'ai remplacé le nom Users dans le code par : NomDuUsers
penses tu que l'on peut par macro faire l'install de la partie xml (ce qui est ton fort dans ce domaine contrairement à moi :( ) ??
De façon à que ca soit permanent qd l'on ouvre Excel
PS : le xml en macro c'est pas mon fort :(

XML:
<?xml version="1.0"?>

-<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui" xmlns:x1="http://schemas.microsoft.com/office/2009/07/customui/macro" xmlns:x2="PDFMaker.OfficeAddin">


-<mso:ribbon>

<mso:qat/>


-<mso:tabs>


-<mso:tab insertBeforeQ="mso:TabBackgroundRemoval" label="INDEX" id="mso_c1.11178E9">


-<mso:group label="MACROS" id="mso_c2.11178E9" autoScale="true" imageMso="ListMacros">

<mso:button label="CORR FOLIOS" imageMso="Clear" visible="true" onAction="C:\Users\NomDuUsers\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!CorrComaDashSpace" idQ="x1:C:_Users_NomDuUsers_Documents_MACROS_COMPLEMENTS_MACROS_INDEX_INDEX_MACROS_V2.xlam_CorrComaDashSpace_0_114C4B8"/>

<mso:button label="FAMILIES" imageMso="ListMacros" visible="true" onAction="C:\Users\NomDuUsers\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!Family" idQ="x1:C:_Users_NomDuUsers_Documents_MACROS_COMPLEMENTS_MACROS_INDEX_INDEX_MACROS_V2.xlam_Family_1_114C4B8"/>

<mso:button label="CHANGE FOLIOS" imageMso="TableSelect" visible="true" onAction="C:\Users\NomDuUsers\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!ParamChangeFolios" idQ="x1:C:_Users_NomDuUsers_Documents_MACROS_COMPLEMENTS_MACROS_INDEX_INDEX_MACROS_V2.xlam_ParamChangeFolios_0_1183C6A"/>

<mso:button label="CHANGE FOLIOS BY SELECTION" imageMso="Bullets" visible="true" onAction="C:\Users\NomDuUsers\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!SelectParaChangeFolios" idQ="x1:C:_Users_NomDuUsers_Documents_MACROS_COMPLEMENTS_MACROS_INDEX_INDEX_MACROS_V2.xlam_SelectParaChangeFolios_1_1183C6A"/>

</mso:group>

</mso:tab>


-<mso:tab idQ="mso:TabHome">

<mso:group visible="false" idQ="mso:GroupIdeas"/>

</mso:tab>

<mso:tab idQ="x2:ACROBAT_RIBBON"/>

</mso:tabs>

</mso:ribbon>

</mso:customUI>
 
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
Re,
OK pour la partie écriture dans le fichier c'est clair …
Par contre si je veux créer le xml via vba afin que le Nom des users se fasse automatiquement, et que je ne le remplace pas manuellement dans le fichier xml.
Tu me conseilles de m'y prendre comment ?

PS : dans le xml du post#26 il y a des tirets devant les <mso: => -<mso:
Est ce normal ?

Si je comprend bien c'est ce Sub ci-dessous, que je dois utilser, avec pour le onAction le chemin complet du xlam ?

VB:
Sub testUIUI()
    Dim XmLdoC, TabS, XtaB, grouP, XbuttoN, Nom$, I&
    Set XmLdoC = createXMLbase
    Set TabS = XmLdoC.getelementsbytagname("tabs")(0)
    '<group id="Group_1" label="GROUPETEST" imageMso="FormulaMoreFunctionsMenu" autoScale="true">

    'creation de l'onglet
    Set XtaB = TabS.appendchild(XmLdoC.createelement("tab"))
    With XtaB: .setattribute "id", "tab1": .setattribute "label", "mon premier onglet": End With

    'creation du premier groupe
    Set grouP = XtaB.appendchild(XmLdoC.createelement("group"))
    With grouP: .setattribute "id", "group1": .setattribute "label", "mon premier groupe": End With

    '<button id="x1" label="test1" imageMso="ListMacros" onAction="test1" visible="true"/>
    Set XbuttoN = grouP.appendchild(XmLdoC.createelement("button"))
    With XbuttoN
        .setattribute "id", "x1"
        .setattribute "label", "bouton1"
        .setattribute "imageMso", "ListMacros"
        .setattribute "onAction", "test1"
        .setattribute "visible", "true"
        .setattribute "size", "large"
    End With

    '<button id="x2" label="test2" imageMso="ListMacros" onAction="test2" visible="true"/>
    Set XbuttoN = grouP.appendchild(XmLdoC.createelement("button"))
    With XbuttoN
        .setattribute "id", "x2"
        .setattribute "label", "bouton2"
        .setattribute "imageMso", "ListMacros"
        .setattribute "onAction", "test2"
        .setattribute "visible", "true"
        .setattribute "size", "large"

    End With

    '<button id="x3" label="test3" imageMso="ListMacros" onAction="test3" visible="true"/>
    Set XbuttoN = grouP.appendchild(XmLdoC.createelement("button"))
    With XbuttoN
        .setattribute "id", "x3"
        .setattribute "label", "bouton3"
        .setattribute "imageMso", "ListMacros"
        .setattribute "onAction", "test3"
        .setattribute "visible", "true"
        .setattribute "size", "large"
    End With

    Nom = Environ("userprofile") & "\AppData\Local\Microsoft\Office\Excel.officeUI"
    I = FreeFile
    Open Nom For Output As #I: Print #I, XmLdoC.XML: Close #I
End Sub

Mais ca pose pas de pb si l'écriture écrase l'existant comme ici ??
1685105416442-png.1170941

Et quand j'ai créé l'onglet manuellement avec les 4 macros je me suis retrouvé avec ceci sur mon l'ordi PC :
XML:
-<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui" xmlns:x1="http://schemas.microsoft.com/office/2009/07/customui/macro" xmlns:x2="PDFMaker.OfficeAddin">
Comment je fais pour l'automatisation de la partie xml sachant que je devrais l'installer par macro sur différents Users PC et à distance et peut être des Excel.CustomUI existant dont il existe des paramètres xml que je ne devrait pas écraser ??
Ils ont tous des Excel récents voir office 365 …
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour ryu
re ben ne les met pas les schémas ca marchera quand même
en direct dynamique comme ca , ce qui compte c'est que la structure soit correcte
comme tu peux le voir sans les attribut

1685161125817.png


mais je te le redis
ton nouvel onglet devrait être fait dans le xla intégré avec customUI ,comme ca rien que le fait d'activer le xlam t ajouterait le nouvel onglet
 

Statistiques des forums

Discussions
315 105
Messages
2 116 262
Membres
112 704
dernier inscrit
zanda19