J'ai rencontré des difficultés avec la solution de Roi-Kyi Bryant lorsque plusieurs compléments ont tenté de modifier le ruban. Je n'ai pas non plus accès administrateur sur mon ordinateur de travail, ce qui a exclu l'installation du Custom UI Editor. Donc, si vous êtes dans le même bateau que moi, voici un exemple alternatif à la personnalisation du ruban en utilisant uniquement Excel. Notez que ma solution est dérivée du guide Microsoft .
- Créez des fichiers / fichiers Excel dont vous souhaitez personnaliser les rubans. Dans mon cas, j'ai créé deux
.xlamfichiers, Chart Tools.xlametPriveleged UDFs.xlam , pour montrer comment plusieurs compléments peuvent interagir avec le ruban.
- Créez un dossier, avec n'importe quel nom de dossier, pour chaque fichier que vous venez de créer.
- Dans chacun des dossiers que vous avez créés, ajoutez un dossier
customUIet _rels.
- Dans chaque
customUIdossier, créez un customUI.xmlfichier. Le customUI.xmlfichier détaille la manière dont les fichiers Excel interagissent avec le ruban. La partie 2 du guide Microsoft couvre les éléments du customUI.xmlfichier.
Mon customUI.xmlfichier pour Chart Tools.xlamressemble à ceci
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:chartToolsTab" label="Chart Tools">
<group id="relativeChartMovementGroup" label="Relative Chart Movement" >
<button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
<button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
</group >
<group id="chartDeletionGroup" label="Chart Deletion">
<button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Mon customUI.xmlfichier pour Priveleged UDFs.xlamressemble à ceci
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
<group id="privelgedUDFsGroup" label="Toggle" >
<button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
<button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
</group >
</tab>
</tabs>
</ribbon>
</customUI>
- Pour chaque fichier que vous avez créé à l'étape 1, ajoutez un suffixe
.zipà leur nom de fichier. Dans mon cas, j'ai renommé Chart Tools.xlamen Chart Tools.xlam.zipet Privelged UDFs.xlamenPriveleged UDFs.xlam.zip .
- Ouvrez chaque
.zipfichier et accédez au _relsdossier. Copiez le .relsfichier dans le _relsdossier que vous avez créé à l'étape 3. Modifiez chaque .rels fichier avec un éditeur de texte. À partir du guide Microsoft
Entre l' <Relationship>élément final et l' <Relationships>élément de fermeture
, ajoutez une ligne qui crée une relation entre le fichier document et le fichier de personnalisation. Assurez-vous de spécifier correctement les noms de dossier et de fichier.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Mon .relsfichier pour Chart Tools.xlamressemble à ceci
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
</Relationships>
Mon .relsfichier pour Priveleged UDFsressemble à ceci.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
</Relationships>
- Remplacez les
.relsfichiers de chaque .zipfichier par le .rels/ les fichiers que vous avez modifiés à l'étape précédente.
- Copiez et collez le
.customUIdossier que vous avez créé dans le répertoire de base du .zipfichier / fichiers.
- Supprimez l'
.zipextension de fichier des fichiers Excel que vous avez créés .
- Si vous avez créé des
.xlamfichiers, de retour dans Excel, ajoutez-les à vos compléments Excel.
- Le cas échéant, créez des rappels dans chacun de vos compléments. À l'étape 4, il y a des
onActionmots - clés dans mes boutons. Le onActionmot-clé indique que, lorsque l'élément conteneur est déclenché, l'application Excel déclenchera la sous-routine entre guillemets directement après le onActionmot - clé. C'est ce qu'on appelle un rappel . Dans mes .xlamfichiers, j'ai un module appelé CallBacksoù j'ai inclus mes sous-routines de rappel.

Mon CallBacksmodule pour Chart Tools.xlamressemble à
Option Explicit
Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartWithRelativeLinks
End Sub
Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartToManySheetsWithRelativeLinks
End Sub
Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
DeleteAllChartsInWorkbookSharingAnAddress
End Sub
Mon CallBacksmodule pour Priveleged UDFs.xlamressemble à
Option explicite
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Différents éléments ont une signature de sous-routine de rappel différente. Pour les boutons, le paramètre de sous-routine requis est ByRef control As IRibbonControl. Si vous ne vous conformez pas à la signature de rappel requise, vous recevrez une erreur lors de la compilation de votre / vos projets VBA. La partie 3 du guide Microsoft définit toutes les signatures de rappel.
Voici à quoi ressemble mon exemple fini

Quelques conseils de clôture
- Si vous souhaitez que les compléments partagent les éléments du ruban, utilisez le mot clé
idQet xlmns:. Dans mon exemple, les Chart Tools.xlamet les Priveleged UDFs.xlamdeux ont accès aux éléments avec idQun égal à x:chartToolsTabet x:privelgedUDFsTab. Pour que cela fonctionne, l' x:est nécessaire, et je l' ai défini son espace de noms dans la première ligne de mon customUI.xmlfichier, <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. La section Deux façons de personnaliser l'interface utilisateur Fluent dans le guide Microsoft donne plus de détails.
- Si vous souhaitez que les compléments accèdent aux éléments du ruban fournis avec Excel, utilisez le
isMSOmot - clé. La section Deux façons de personnaliser l'interface utilisateur Fluent dans le guide Microsoft donne plus de détails.