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é
il y a encore un soucis avec ton box vertical me semble t il non ?
lequel ? car il me semble que c'est ok .... ?
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="LES BOUTONS">
                <group id="group-0" label="GROUP1">
                    <button id="button_0" onAction="Button_1_click" label="Button 1" imageMso="Clear" size="large"/>
                        <separator id="sep_1"/>
                    <button id="button_1" onAction="Button_2_click" label="Button 2" imageMso="ListMacros" size="large"/>
                        <separator id="sep_2"/>
                    <button id="button_2" onAction="Button_3_click" label="Button 3" imageMso="TableSelect" size="large"/>
                </group>
                <group id="group-1" label="GROUP2">
                    <box id="boxV_0" boxStyle="vertical">
                        <button id="button_3" onAction="blablabla_click" imageMso="Lock"/>
                    </box>
                    <box id="boxV_1" boxStyle="vertical">
                        <button id="button_4" onAction="button_4_Click" imageMso="RecolorColorPicker"/>
                        <button id="button_5" onAction="button_5_Click" imageMso="WindowRestore"/>
                    </box>
                </group>
                <group id="group-2" label="GROUP3">
                    <box id="boxH_2" boxStyle="horizontal">
                        <button id="button_6" onAction="button_6_Click" imageMso="SendCopySendToMailRecipient"/>
                        <button id="button_7" onAction="button_7_Click" imageMso="XmlExpansionPacksExcel"/>
                        <button id="button_8" onAction="button_8_Click" imageMso="UpgradeWorkbook"/>
                        <button id="button_9" onAction="button_9_Click" imageMso="MacroRecord"/>
                        <button id="button_10" onAction="boutonX_10_click" imageMso="FileCheckOutDiscard"/>
                        <button id="button_11" onAction="boutonX_11_click" imageMso="TableConvertToRange"/>
                    </box>
                    <box id="boxH_3" boxStyle="horizontal">
                        <button id="button_12" onAction="button_12_Click" imageMso="SendCopySendToMailRecipient"/>
                        <button id="button_13" onAction="button_13_Click" imageMso="XmlExpansionPacksExcel"/>
                        <button id="button_14" onAction="button_14_Click" imageMso="UpgradeWorkbook"/>
                    </box>
                    <box id="boxH_4" boxStyle="horizontal">
                        <button id="button_15" onAction="button_15_Click" imageMso="SendCopySendToMailRecipient"/>
                        <button id="button_16" onAction="button_16_Click" imageMso="XmlExpansionPacksExcel"/>
                        <button id="button_17" onAction="button_17_Click" imageMso="UpgradeWorkbook"/>
                        <button id="button_18" onAction="button_18_Click" imageMso="MacroRecord"/>
                        <button id="button_19" onAction="boutonX_10_click" imageMso="FileCheckOutDiscard"/>
                    </box>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
 

patricktoulon

XLDnaute Barbatruc
re
ok maintenant si tu a le temps et l'envie

fait moi en un tout seul

un group avec 3 grands boutons avec texte avec un separator entre chaque boutons

un group avec deux box verticaux( 3 boutons avec icon sans texte)

un group avec 3 box horizontaux avec respectivement 6 boutons , 3 boutons , 5 boutons (icon et sans texte )

et pareil que le précedent mais a la place de box c'est buttongroup


bien entendu l'onglet et les groupes avec un label

bon courage j'ai foi en toi ;)
relis bien la demande ;) je met en rouge au cas ou
les box horizontaux visiblement c'est bons
 

patricktoulon

XLDnaute Barbatruc
re
dis moi pourquoi je te demanderais de mettre un box vertical avec un seul boutons
🤣
autant le mettre simplement alors comme ca dans le groupe a la suite avant le box vertical N°2

bon dans tout les cas je pense que tu a compris
les boutons(large/small)
les box (verticaux ou horizontaux)
les buttongroup

si tu a des choses que tu n'a pas compris avant d'aller plus loin dis le moi
dans tout les cas ne t'inquiete pas je te fournirais les exemples que l'on a déjà vu
 

patricktoulon

XLDnaute Barbatruc
re
allez on passe aux toglebutton maintenant
il ont la propriété du double state
c'est a dire un peu a l'instar d'un checkbox préssé ou non préssé
je te donne les callback avec pour tester

le xml
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="exemple">
                <group id="group-0" label="mes toglebuttons">
                    <toggleButton id="toggle_0" onAction="toggle_0_click" imageMso="ViewFormulaBar"/>
                    <toggleButton id="toggle_1" onAction="toggle_1_click" imageMso="WatchWindow"/>
                    <toggleButton id="toggle_2" onAction="toggle_2_click" imageMso="XmlExpansionPacksExcel"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

les callback
VB:
'Callback pour le toggleButton id :toggle_0--> caption : -->dans le group :mes toglebuttons
Sub toggle_0_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_0 -->caption : il est " & pressed
End Sub

'Callback pour le toggleButton id :toggle_1--> caption : -->dans le group :mes toglebuttons
Sub toggle_1_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_1 -->caption : il est " & pressed
End Sub

'Callback pour le toggleButton id :toggle_2--> caption : -->dans le group :mes toglebuttons
Sub toggle_2_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_2 -->caption : il est " & pressed
End Sub
 

RyuAutodidacte

XLDnaute Impliqué
re
allez on passe aux toglebutton maintenant
il ont la propriété du double state
c'est a dire un peu a l'instar d'un checkbox préssé ou non préssé
je te donne les callback avec pour tester

le xml
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="exemple">
                <group id="group-0" label="mes toglebuttons">
                    <toggleButton id="toggle_0" onAction="toggle_0_click" imageMso="ViewFormulaBar"/>
                    <toggleButton id="toggle_1" onAction="toggle_1_click" imageMso="WatchWindow"/>
                    <toggleButton id="toggle_2" onAction="toggle_2_click" imageMso="XmlExpansionPacksExcel"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

les callback
VB:
'Callback pour le toggleButton id :toggle_0--> caption : -->dans le group :mes toglebuttons
Sub toggle_0_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_0 -->caption : il est " & pressed
End Sub

'Callback pour le toggleButton id :toggle_1--> caption : -->dans le group :mes toglebuttons
Sub toggle_1_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_1 -->caption : il est " & pressed
End Sub

'Callback pour le toggleButton id :toggle_2--> caption : -->dans le group :mes toglebuttons
Sub toggle_2_click(control As IRibbonControl, pressed As Boolean)
MsgBox " vous avez cliqué sur le control : <toggleButton>   toggle_2 -->caption : il est " & pressed
End Sub
Re Patrick,
Je ne comprends pas, je l'ai refait plusieurs fois en insérant ton xml et je ne vois pas apparaitre l'onglet exemple ... y a t il qq chose qui m'a échappé, ou tu m'as posé un piège :D
 

Pièces jointes

  • MyToggleButton.xlsm
    18 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
re
oui il y avait un piège
diabolo.gif

regarde bien
1686093240083.png

il faut être attentif a tout

j'ai bien avancer dans mon nouveau ribbon creator
sauf que maintenant le xml et les callback sont créer et a la sortie le fichier est fonctionnel
j'ai utilisé une autre méthode
purée j'ai passé plus de 7 heures dessus
 

RyuAutodidacte

XLDnaute Impliqué
oui il y avait un piège
diabolo.gif

regarde bien
🤣
Re
je devais plus voir clair après ma journée de taf 🤣 🤣 🤣

Dis moi quelle est la différence entre "<?xml version="1.0" encoding="UTF-8" standalone="no"?>" et "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>" pour les ribbons ? Y a t il une incidence sur le résultat du ribbon ou non, ou cela joue t il dans les paramètres du xlsm ?

question supp en rapport avec les Xlsm Ribbon créés pour devenir des xlam et donc aussi le sujet de mon post :
je me retrouve à devoir installé les xlam sur des PC à distance en prenant la mains dessus pour mon taf.

1er problème : je vais avoir des PC de collègues dans des filiales et leur PC vont être dans leur langue natale
donc pour cela j'ai créé une procédure :
VB:
Sub InstallXLAM()
Dim GetXLAM$, XLAM_Name$, Sep, MyFolders, MyUserNamePC$, i As Byte, CheckFolders$, PathDestination$

    GetXLAM = Application.GetOpenFilename()
    XLAM_Name = Mid(GetXLAM, InStrRev(GetXLAM, "\") + 1)
   
    Sep = Application.PathSeparator
    MyFolders = Array("MACROS COMPLEMENTS", "MACROS COMPLEMENTS" & Sep & "MACROS INDEX")
    MyUserNamePC = Environ("userprofile")
   
    For i = LBound(MyFolders) To UBound(MyFolders)
        CheckFolders = MyUserNamePC & "\Documents\" & MyFolders(i) & Sep
        If Len(Dir(CheckFolders, vbDirectory)) = 0 Then
            MkDir CheckFolders
        End If
    Next
   
    PathDestination = MyUserNamePC & "\Documents\" & MyFolders(1) & Sep & XLAM_Name
   
    If GetXLAM Like "*" & ".xlam" Then
        On Error GoTo myError
        FileCopy GetXLAM, PathDestination
        Application.AddIns.Add PathDestination
        AddIns(Split(XLAM_Name, ".")(0)).Installed = True
    End If
    Exit Sub
myError:
    MsgBox "This xlam file exist already and is opened on Excel Addins"
End Sub
Le problème, c'est que je ne peux pas forcément lancer la procédure à cause des paramètres de sécurité.
Je ne suis pas du tout habitué aux paramètre de sécurité PC afin que ma macro puisse marcher pour l'installation :( Peux tu m'aider à ce sujet ? stp

2ème problème : comment être sûr, sur PC, qu'une fois mon xlam installé, celui marche correctement sans être entravé par les paramètres de sécurité dans les options d'Excel PC ???

Le fichier sans l'erreur ;)
 

Pièces jointes

  • MyToggleButton.xlsm
    18 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
re
je te l'ai dis déjà
le standalone =yes c'est pour que l'application choisisse le bon customUI.xml toute seule comme une grande
comme ça c' est compatible de 2007 à 2021

après pour le xla j'en sais rien
si il est installé et que la securité ne bloque pas les macros il ne devrait pas y avoir de soucis
 

patricktoulon

XLDnaute Barbatruc
regarde je suis sur la partie compilation
je fait comme ca pour pas bousiller mon travail sur l'interface
avec mon interface je crée les xml
et maintenant il faut que je greffe ceci (nouvelle méthode)
regarde
rien n'existe au départ et a l'arrivée on a notre fichier avec ruban avec le module des callback intégrés

demo.gif
 

RyuAutodidacte

XLDnaute Impliqué
regarde je suis sur la partie compilation
je fait comme ca pour pas bousiller mon travail sur l'interface
avec mon interface je crée les xml
et maintenant il faut que je greffe ceci (nouvelle méthode)
regarde
rien n'existe au départ et a l'arrivée on a notre fichier avec ruban avec le module des callback intégrés

Regarde la pièce jointe 1171823
C'est Top :) 👍
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 124
Messages
2 116 471
Membres
112 753
dernier inscrit
PUARAI29