Introduction
L'objectif de ce tutoriel n'est pas d'expliquer le langage XML mais de vous apprendre à intégrer les fichiers XML que vous pouvez récupérer sur des forums ou sur le web, afin de personnaliser vos classeurs. Dans l'exemple présenté, provenant de MSDN , nous allons ajouter un nouvel onglet nommé "MesCouleurs". Il vous permet d'accéder à une palette de type excel 2003 pour définir les couleurs de fond de vos cellules.
La structure des documents d'office a changé avec la version 2007. L'objectif de ce tuto n'est pas de faire la description exhaustive de cette nouvelle structure mais de vous indiquer les éléments nécessaires pour enrichir vos classeurs.
Un fichier excel 2007 celui-ci contient en fait plusieurs documents. Pour les visualiser, ajouter une extension .zip derrière l'extension .xlsx (ne tenez pas compte du message concernant le changement de type de fichier, vous reviendrez en arrière sans problème). Utilisez winZip ou équivalent pour visualiser le contenu de l'archive ainsi obtenue. Si vous faites cela avec le classeur associé à ce tutoriel (rubancouleur.xlsm.zip) vous obtenez ceci.
Dans l'archive on trouve en particulier deux dossiers qui nous intéressent ici :
- Le dossier _rels (au premier niveau) contient la description des relations entre les différents éléments constituant le classeur final.
- Le dossier customUI n'existe que si vous avez un onglet personnalisé pour ce classeur.
Les onglets du ruban, les panneaux de chaque onglet et enfin les différents outils sont décrits par le langage structuré xml (eXtended Markup Language). Nous allons voir où et comment intégrer un fichier xml dans un classeur.
Le classeur excel
Le classeur doit contenir les macros qui seront déclenchées par les boutons de votre nouvel onglet.Dans un nouveau classeur, ouvrez l'éditeur VBE (via l'onglet développeur. Si celui-ci n'est pas visible, activez le via le bouton office/options d'excel/standard). Dans un module ordinaire, collez le code ci-dessous (voir l'explication détaillée de chaque macro sur MSDN) :
Option Explicit
Public MonRuban As IRibbonUI
'Déclenchement lors du chargement du ruban personnalisé.
Sub onLoad(ribbon As IRibbonUI)
Set MonRuban = ribbon
End Sub
'Callback for highlightGallery getEnabled
Sub GetEnabled(control As IRibbonControl, ByRef returnedVal)
returnedVal = True
End Sub
'Callback for highlightGallery getItemCount
'Nombre de couleurs dans la palette
Sub GetItemCount(control As IRibbonControl, ByRef returnedVal)
returnedVal = 56
End Sub
'Callback for highlightGallery getItemHeight
Sub GetItemHeight(control As IRibbonControl, ByRef returnedVal)
returnedVal = 20
End Sub
'Callback for highlightGallery getItemWidth
Sub GetItemWidth(control As IRibbonControl, ByRef returnedVal)
returnedVal = 20
End Sub
'Callback for highlightGallery getItemImage
'Création la palette de couleur
Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef returnedVal)
Dim ColTemp As Integer
Dim Fichier As String
Application.ScreenUpdating = False
Fichier = "C:\ImageTemp.jpg"
If Dir(Fichier) <> "" Then Kill Fichier
ColTemp = Feuil1.Range("A1").Interior.ColorIndex
Feuil1.Range("A1").Interior.ColorIndex = index
Feuil1.Range("A1").CopyPicture
'Crée un graphique temporaire
With Feuil1.ChartObjects.Add(0, 0, _
Feuil1.Range("A1").Width, Feuil1.Range("A1").Height).Chart
.Paste
'exporte l'image sur le disque dur, dans le même répertoire que ce classeur.
.Export Fichier, "JPG"
End With
With Feuil1
'Supprime le graphique temporaire
.ChartObjects(Feuil1.ChartObjects.Count).Delete
'Supprime l'image dans la feuille.
'.Shapes(Feuil1.Shapes.Count).Delete
End With
Set returnedVal = LoadPicture(Fichier)
Range("A1").Interior.ColorIndex = ColTemp
Application.ScreenUpdating = True
End Sub
'Callback for highlightGallery onAction
'Colorie les cellules sélectionnées
Sub InsertFillColor(control As IRibbonControl, id As String, index As Integer)
Selection.Interior.ColorIndex = index
End Sub
'Callback for noColorButton onAction
'Supprime les couleurs dans les cellules sélectionnées
Sub RemoveFillColor(control As IRibbonControl)
Selection.Interior.ColorIndex = xlNone
End Sub
Enregistrez maintenant votre classeur avec l'extension .xlsm, par exemple RubanCouleurs.xlsm et fermez le.
Le fichier XML
Ouvrez le bloc note (ou tout autre éditeur de texte).Collez ceci :
<?xml version="1.0" encoding="utf-8" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoad">
<ribbon>
<tabs>
<tab id="demoTab" label="MesCouleurs" >
<group id="galleryGroup" label="Couleurs personnalisées">
<splitButton id="highlightSplitButton" >
<button id="highlightButton"
imageMso="CellFillColorPicker"/>
<menu>
<gallery id="highlightGallery"
label="Choisissez une Couleur"
showItemLabel="false"
columns="8"
rows="7"
onAction="InsertFillColor"
getEnabled="GetEnabled"
getItemCount="GetItemCount"
getItemHeight="GetItemHeight"
getItemWidth="GetItemWidth"
getItemImage="GetItemImage">
<button id="noColorButton"
label="Aucun remplissage" onAction="RemoveFillColor"
screentip="Efface la couleur de fond"/>
</gallery>
</menu>
</splitButton>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Enregistrez votre fichier sous "customUI.xml" (sans les guillemets) et fermez le.
Lier le fichier xml au classeur
Dans l'explorateur, sélectionnez le classeur excel RubanCouleurs.xlsm que vous avez créé. Renommez le RubanCouleurs.xlsm.zip. Vous pouvez maintenant ouvrir cette archive dans winZip ou équivalent et la modifier.
Créez au même niveau que les dossiers _rels, DocProps et xl un dossier nommé customUI et glissez y le fichier customUI.xml.
Il faut maintenant établir la liaison entre votre classeur et son fichier xml. Pour cela il faut modifier le fichier .rels qui est contenu dans le dossier _rels. Extrayez ce fichier et ouvrez le dans un éditeur de texte. Il se présente sous la forme
<?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"/> </Relationships>
Juste avant la balise </relationships>, ajoutez la ligne suivante sur une seule ligne :
<Relationship Id="couleur1" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
dans laquelle le nom de l'identifiant (Id) doit être unique.
Enregistrez, remplacez le fichier initial de l'archive par celui-ci, fermez l'archive.
Renommez maintenant votre fichier RubanCouleurs.xlsm.zip en RubanCouleurs.xlsm et ouvrez avec excel. Vous avez un nouvel onglet avec un bouton vous permettant d'accéder à une palette de couleur classique.
Cette page a été vue 2640 fois.