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é
Supporter XLD
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é
Supporter XLD
Hello Patrick,
OK, bon je vais faire des tests et adapter le code
Par contre j'aurais besoins d'infos supp ou de savoir ce qu'il faut modifier dans ton code :
1) Dans ton code on a :
VB:
        With XbuttoN
            .setattribute "id", "x1"
Moi je n'ai pas "id" mais idQ
Dans mon Xml :
XML:
<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"/>
J'ai :
idQ="x1:C:_Users_NomDuUsers_Documents_MACROS_COMPLEMENTS_MACROS_INDEX_INDEX_MACROS_V2.xlam_CorrComaDashSpace_0_114C4B8"
=> Dois je juste remplacé id par idQ ou faire des changements supplémentaires ?

2) Sur cette partie du xml j'ai : insertBeforeQ
XML:
-<mso:tab insertBeforeQ="mso:TabBackgroundRemoval" label="INDEX" id="mso_c1.11178E9">
Comment je dois m'y prendre dans ton code pour l'écrire de façon correct ?
 
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
Re,

Il me manque les infos du post#31, mais voilà ou j'en suis :
(PS : pour le Set XmLdoC = createXMLbase il faut activer une référence ??)
VB:
Sub testUIUI()
    Dim XmLdoC, TabS, XtaB, grouP, XbuttoN, Nom$, I&, TheUserProfil As String
  
    TheUserProfil = Environ("userprofile")
  
    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", "INDEX": End With

    'creation du premier groupe
    Set grouP = XtaB.appendchild(XmLdoC.createelement("group"))
    With grouP: .setattribute "id", "group1": .setattribute "label", "MACROS": 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", "CORR FOLIOS"
        .setattribute "imageMso", "Clear"
        .setattribute "onAction", TheUserProfil & "\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!CorrComaDashSpace"
        .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", "FAMILIES"
        .setattribute "imageMso", "ListMacros"
        .setattribute "onAction", TheUserProfil & "\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!Family"
        .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", "CHANGE FOLIOS"
        .setattribute "imageMso", "TableSelect"
        .setattribute "onAction", TheUserProfil & "\Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!ParamChangeFolios"
        .setattribute "visible", "true"
        .setattribute "size", "large"
    End With

    '<button id="x4" label="test4" imageMso="ListMacros" onAction="test4" visible="true"/>
    Set XbuttoN = grouP.appendchild(XmLdoC.createelement("button"))
    With XbuttoN
        .setattribute "id", "x4"
        .setattribute "label", "CHANGE FOLIOS BY SELECTION"
        .setattribute "imageMso", "Bullets"
        .setattribute "onAction", TheUserProfil & "Documents\MACROS COMPLEMENTS\MACROS INDEX\INDEX MACROS V2.xlam!SelectParaChangeFolios"
        .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
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui avec 365 et 2021 le late binding ne fonctionne plus pour certaine ref donc oui activer la référence

si tu essayais de faire comme je te te dis plutôt que de vouloir imiter le fichier
oublis les "mso:" ,"IdQ" etc

le insert before oui c'est un attribut supplémentaire
VB:
 'creation de l'onglet
    Set xtab = tabs.appendchild(xmldoc.createelement("tab"))
    With xtab: .setattribute "id", "tab1": .setattribute "label", "mon premier onglet":
    .setattribute "insertBeforeQ", "TabBackgroundRemoval"
    End With
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
Coucou Patrick ;) ,

Merci pour la modification ci-dessus.

- Si je comprends bien, le code est ok comme il est sur le post#32 … ? (sans modifier quoique se soit mis à part la modification que tu m'as donné ci-dessus).
En tout cas je l'ai testé sur le PC portable que l'on m'a passé, et cela a marché,
ton code de suppression ok aussi.

- peux tu me donner plus de détails et explications pour ma compréhension qd tu dis :
… oublis les "mso:" ,"IdQ" etc

- Étant donné que le fichier doit être partagé via SharePoint (les macros ne marchent pas via SharePoint), je ne peux le fournir en xlsm … c'est pour cela qu'il sera fait en xlsx (utilisation de plusieurs utilisateurs en même temps pour les modification)

- Je n'ai pas encore la maitrise (la meilleurs solution que j'ai trouvé sur le net 👍) de ce que tu m'as fourni,
mais je suis tombé sur un thread sur le net, qui parle (si j'ai bien compris …) de mettre le ruban directement sur le xlam …
  1. Qu'en penses tu (judicieux ou pas) ?
  2. Est ce faisable ? (car 1ère solution que tu m'avais donné : enregistrer le ruban dans le xml :
    me convient pas => xlsx dont j'ai besoin)
  3. Si oui comment ?
- Après installation du xlam chez un utilisateur, quand il démarre Excel j'ai un message qui apparaît :
Traduction : "Ce type de fichier n'est pas pris en charge dans la vue protégée."

1685444232088.png


Que dois-je modifier dans les options d'Excel afin que ce message ne réapparaît plus ???

PS : j'ai pas bien compris à quoi sert le code : "Sub importXmlRibbon()"

Merci d'avance Patrick
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour ryu
- Je n'ai pas encore la maitrise (la meilleurs solution que j'ai trouvé sur le net 👍) de ce que tu m'as fourni,
mais je suis tombé sur un thread sur le net, qui parle (si j'ai bien compris …) de mettre le ruban directement sur le xlam …

  1. Qu'en penses tu (judicieux ou pas) ?
  2. Est ce faisable ? (car 1ère solution que tu m'avais donné : enregistrer le ruban dans le xml :
    me convient pas => xlsx dont j'ai besoin)
  3. Si oui comment ?
réponse en page 2 post #21 les dernière lignes et en rouge en plus 🤣 et même en post 30 je te le redis

et oui il te faut alors le faire avec l'application custom ui ou autre comme mon application perso que je me suis fait moi même

donne moi
le caption des boutons(le texte du bouton)
le msoimage
le nom de la macro a déclencher dans le xla
le nom du groupe
et je te fait un xlm avec ruban que tu n'aura plus qu'a sauver en xlam(apres avoir transférer tes codes dans les macro callback)
;)


;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
alors d'après ce que je comprends de ton xml
est ce bien ça
VB:
onglet:"INDEX" ( le nom de l'onglet)

le groupe:"MACROS"( le nom du groupe)

bouton1:
    label:"CORR FOLIOS"
    imagemso:"clear"
    on action:"CorrComaDashSpace"

bouton2
    label:"FAMILIES"
    imagemso:"ListMacros"
    onaction:"Family"

bouton3
    label:"CHANGE FOLIOS"
    imagemso:"TableSelect"
    onaction:"ParamChangeFolios"

bouton4
    label:"CHANGE FOLIOS BY SELECTION"
    imagemso:"Bullets"
    onaction:"SelectParaChangeFolios"
 

patricktoulon

XLDnaute Barbatruc
re
si je ne me trompe pas mis a par les image mso que je n'ai pas

construit avec ma propre application ribbon créator je créée les callback en meme temps dans un fichier text que je copie ensuite et colle dans un module
demo.gif


resultat du fichier sample créé
demo.gif


ceci est le xml intégré
XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<customUI xxmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="tab-0" label="INDEX">
                <group id="group-0" label="MACROS">
                    <button id="button_0" onAction="CORRCOMMDASHSPACE" label="CORR FOLIOS" imageMso="ClearAll" size="large"/>
                    <button id="button_1" label="FAMILY" onAction="family" imageMso="LabelInsert" size="large"/>
                    <button id="button_2" label="CHANGE FOLIOS" onAction="ParamChangeFolios" imageMso="TableSelectVisibleCells" size="large"/>
                    <button id="button_3" label="CHANGE FOLIOS BY SELECTION" onAction="CHANGE_FOLIOS_BY_SELECTION_click" imageMso="BulletsAndNumberingBulletsDialog" size="large"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

ceci est le callback généré dans un fichier text

1685458129397.png


je vais essayer de mettre mes liste de msoimage car il m'en manque visiblement

voila dis moi si ça ressemble a ce que tu souhaite
 

Pièces jointes

  • Sample.xlsm
    6.8 KB · Affichages: 5

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
alors d'après ce que je comprends de ton xml
est ce bien ça
VB:
onglet:"INDEX" ( le nom de l'onglet)

le groupe:"MACROS"( le nom du groupe)

bouton1:
    label:"CORR FOLIOS"
    imagemso:"clear"
    on action:"CorrComaDashSpace"

bouton2
    label:"FAMILIES"
    imagemso:"ListMacros"
    onaction:"Family"

bouton3
    label:"CHANGE FOLIOS"
    imagemso:"TableSelect"
    onaction:"ParamChangeFolios"

bouton4
    label:"CHANGE FOLIOS BY SELECTION"
    imagemso:"Bullets"
    onaction:"SelectParaChangeFolios"
Re,
Oui c'est bien ça 👍
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
tu es sur Mac la non ?
Re
oui je suis sur Mac, car l'intérêt c'est que cela puis marcher pour les 2 versions
Je vais d'abords manger, et j'essaierai après sur PC.

PS : C'est vraiment un sujet intéressant, j'ai bien envie de m'y pencher plus sérieusement (avec plus de temps qu'en ce moment) afin de faire un truc bien sympa pour MAC / PC

… tu fais toujours des truc qui ont l'air Harcore :D qd je vois ton CustomUI que tu as créé (ça me plait ;) )
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
J'utilise SharePoint au taf et les macros fonctionnent
Hello @Staple1600,
Ha bon … ? dans SharePoint même, ou tu ouvres le fichier Excel à partir de SharePoint vers l'application Excel de l'ordinateur afin d'y appliquer les macros => ce qui est mon intention de départ

Udapte :
j'ai trouver ceci que tu as écris
cela reviens bien à ouvrir le fichier Excel qui est dans SharePoint avec l'application de bureau Excel
(et quand on le referme il fait l'enregistrement dans SharePoint des modifications apportées)
Si j'ai bien compris le mécanisme que tu as écris …
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa