FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Où trouver une description du bouton Office et du ruban Excel 2007 ?
- Où se trouve l'onglet de gestion des macros, dans Excel 2007 ?
- Comment afficher les raccourcis clavier du ruban ?
- Comment se déplacer rapidement entre les différents onglets du ruban ?
- Est il possible d'afficher rapidement les boîtes de dialogues depuis le ruban Excel 2007 ?
- Comment masquer ou réafficher le ruban par macro ?
- Est-il possible de copier la barre d'outils Accès rapide Excel 2007 ?
- Comment retrouver l'ID de chaque contrôle du ruban ?
- Est-il possible de déclencher une macro depuis la barre d'outils accès rapide ?
- Comment modifier les images des boutons placés dans la barre d'outils accès rapide ?
- Est-il possible de modifier et personnaliser le ruban ?
- Existe-t-il des outils pour faciliter la personnalisation du ruban ?
- Quels sont les noms xml des onglets standards, dans Excel 2007 ?
- Est-il possible d'afficher un groupe standard dans un onglet personnel ?
- Comment ajouter un groupe dans un onglet standard ?
- Est-il possible d'afficher une commande standard dans un onglet personnel ?
- Comment masquer un onglet standard ?
- Comment désactiver une commande prédéfinie du ruban ?
- Comment réattribuer une fonction personnelle à une commande prédéfinie du ruban ?
- Comment gérer un Combobox dans un onglet personnalisé ?
- Comment activer de manière conditionnelle un bouton dans un onglet personnalisé ?
- Comment forcer le regroupement de tous mes compléments dans un même onglet ?
- Est-il possible d'afficher un groupe prédéfini dans un autre onglet prédéfini ?
- Comment afficher toutes les images d'un répertoire sous forme de galerie dans le ruban ?
- Comment saisir un mot de passe sous forme d'astérisques dans le ruban ?
- C'est quoi une fonction d'appel CallBack ?
- Comment identifier les erreurs dans les fichiers xml de personnalisation ?
- Est t'il possible de désactiver le bouton d'aide Excel ?
- Comment exécuter une transaction prédéfinie du ruban par macro ?
- Est-il possible de masquer la description "NomDuClasseur.xlsm/Appuyez sur F1 pour obtenir de l'aide" sous un contrôle personnalisé ?
- Comment utiliser les transactions du bouton Office après avoir supprimé le ruban ?
- Comment désactiver un bouton personnalisé du Ruban si aucun fichier n'est ouvert ?
- Comment lire les propriétés des contrôles prédéfinis idMso ?
- Comment déclencher une transaction du ruban par macro ?
- Pourquoi j'ai un message d'erreur lorsque j'utilise un bouton personnalisé dans le ruban ?
- Comment lister tous les fichiers d'un répertoire dans un combobox ?
- Comment définir la largeur d'une zone de texte pour un seul caractère ?
Microsoft met à disposition un support pour faciliter la prise en main du ruban :
Cliquez sur le lien Démarrer le guide pour visualiser la présentation Flash. En sélectionnant les images de la barre d'outils Excel 2003, l'équivalence Excel 2007 s'affiche à l'écran.
Vous trouverez aussi quelques informations dans ce lien :
Le bouton Office et le ruban Excel 2007.
Ouvrez l'onglet Développeur pour atteindre le menu de gestion des macros.
L'onglet Développeur est constitué de 3 groupes :
Le groupe Code :
* Accéder à l'éditeur de macros (Alt+F11).
* Afficher la classique boîte de dialogue qui liste les macros exécutables (Alt+F8).
* Utiliser l'enregistreur de macros.
* Gérer la sécurité des macros.
Le groupe Contrôles :
* Insérer des contrôles Formulaires ou ActiveX.
* Activer ou désactiver le mode création.
* Afficher la fenêtre Propriétés.
* Visualiser le code de la feuille active.
Le groupe XML :
* Importer et exporter des fichiers xml.
* Actualiser les données.
* Mapper dans le classeur.
Si l'onglet Développeur n'apparaît pas dans le ruban :
Cliquez sur le bouton Office,
puis sur le bouton Options Excel.
Cliquez sur le menu Standard.
Cochez l'option Afficher l'onglet Développeur dans le ruban.
Cliquez sur le bouton OK pour valider.
L'onglet Développeur peut être affiché ou masqué par macro :
Sub
AfficherMasquer_OngletDeveloppeur
(
)
With
Application
If
.ShowDevTools
=
False
Then
.ShowDevTools
=
True
Else
.ShowDevTools
=
False
End
If
End
With
End
Sub
Utilisez sur la touche clavier Alt pour faire apparaître les raccourcis associés aux différents onglets du ruban,
ainsi que les raccourcis des éléments de groupes affichés.
Appuyez de nouveau sur la touche Alt pour masquer les raccourcis.
Par exemple, pour créer un commentaire dans la cellule active:
Appuyez sur la touche Alt, pour afficher les raccourcis.
Appuyez sur la touche R pour atteindre l'onglet Révision.
Ensuite appuyez sur les touches C, puis N.
Sélectionnez le ruban et utilisez la molette centrale de votre souris pour passer d'un onglet à l'autre.
Certains groupes possèdent un petit icône dans l'angle inférieur droit. Cliquez dessus pour faire apparaître les boîtes de dialogues associées à ces groupes.
En attendant une solution plus élégante, ci joint une macro qui simule le raccourci clavier Ctrl+F1 (à lancer impérativement depuis la feuille de calcul, et pas depuis l'éditeur VBE).
Option
Explicit
Private
Declare
Sub
keybd_event Lib
"user32"
(
_
ByVal
bVk As
Byte, ByVal
bScan As
Byte, ByVal
dwFlags As
Long
, _
ByVal
dwExtraInfo As
Long
)
Sub
Masquer_Afficher_Ruban
(
)
'Simule Ctrl+F1 (à lancer depuis la feuille de calcul)
Const
VK_CONTROL =
&
H11
Const
VK_F1 =
&
H70
Const
KEYEVENTF_KEYUP =
&
H2
keybd_event VK_CONTROL, 0
, 0
, 0
keybd_event VK_F1, 0
, 0
, 0
keybd_event VK_F1, 0
, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0
, KEYEVENTF_KEYUP, 0
End
Sub
Et si vous utilisez la macro depuis un CommandButton placé sur la feuille de calcul :
Option
Explicit
Private
Declare
Sub
keybd_event Lib
"user32"
(
_
ByVal
bVk As
Byte, ByVal
bScan As
Byte, ByVal
dwFlags As
Long
, _
ByVal
dwExtraInfo As
Long
)
Private
Sub
CommandButton1_Click
(
)
'Simule Ctrl+F1 (à lancer depuis la feuille de calcul)
Const
VK_CONTROL =
&
H11
Const
VK_F1 =
&
H70
Const
KEYEVENTF_KEYUP =
&
H2
Range
(
"A1"
).Select
DoEvents
keybd_event VK_CONTROL, 0
, 0
, 0
keybd_event VK_F1, 0
, 0
, 0
keybd_event VK_F1, 0
, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0
, KEYEVENTF_KEYUP, 0
End
Sub
Nota :
Vous pouvez réduire rapidement le Ruban manuellement en double-cliquant sur le nom de
l'onglet actif. Effectuez un nouveau double-clic sur l'onglet actif pour réafficher le ruban.
Si vous avez personnalisé votre barre d'outils Accès rapide (QAT ou Quick Access Toolbar), vous pouvez l'archiver ou la dupliquer sur
un autre poste en copiant le fichier Excel.qat. Ce fichier est créé lorsque vous ajoutez ou supprimez des
éléments dans la barre d'outils. Il est généralement stocké dans le répertoire :
C:\Documents and Settings\nom_utilisateur\Local Settings\Application Data\Microsoft\Office
Cliquez sur le bouton "Office".
Cliquez sur le bouton "Options Excel".
Menu "Personnaliser".
Le volet Personnalisation permet d'accéder à tous les contrôles (visibles et masqués).
Les ID apparaissent dans une info-bulle lorsque vous passez le curseur sur les contrôles.
La réponse est Oui.
Faites un clic droit dans la barre d'outils accès rapide.
Choisissez "Personnaliser la barre d'outils accès rapide".
Sélectionnez "Macros" dans le menu déroulant "Choisir les commandes dans les catégories suivantes:".
Sélectionnez le nom de votre classeur dans le menu déroulant "Personnaliser la barre d'outils rapide", afin que le bouton
ajouté soit spécifique à un classeur.
Sélectionnez votre macro dans la liste.
Cliquez sur le bouton "Ajouter".
Le nom de la macro est transféré dans la liste de droite. Vous pouvez personnaliser l'icône en sélectionnant le nom
de la procédure,
puis en cliquant sur le bouton "Modifier" (Vous pouvez utiliser uniquement des images de la bibliothèque Office).
Cliquez sur le bouton OK pour valider.
Vous pouvez désormais lancer votre macro en cliquant sur l'icône dans la barre d'outils accès rapide.
Recherchez le fichier Excel.qat sur votre PC. il est généralement stocké dans ce répertoire :
C:\Documents and Settings\nom_utilisateur\Local Settings\Application Data\Microsoft\Office
Renommez le fichier en .txt, puis ouvre le.
Le fichier contient un code xml dans le style :
<
mso
:
customUI
xmlns
:
mso
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<
mso
:
ribbon>
<
mso
:
qat>
<
mso
:
sharedControls>
<
mso
:
control
idQ
=
"mso:FileOpen"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:FileSave"
visible
=
"true"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:FileSendAsAttachment"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:FilePrintQuick"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:FilePrintPreview"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:Spelling"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:Undo"
visible
=
"true"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:Redo"
visible
=
"true"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:SortAscendingExcel"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:SortDescendingExcel"
visible
=
"false"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:InkingStart"
visible
=
"true"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:PivotTableReport"
visible
=
"true"
insertBeforeQ
=
"mso:FileNewDefault"
/>
<
mso
:
control
idQ
=
"mso:FileNewDefault"
visible
=
"false"
/>
<
mso
:
control
idQ
=
"mso:CalculateNow"
visible
=
"true"
/>
<
mso
:
control
idQ
=
"mso:FileSaveAsWebPage"
visible
=
"true"
/>
<
mso
:
control
idQ
=
"mso:Camera"
visible
=
"true"
/>
<
mso
:
control
idQ
=
"mso:DataFormExcel"
visible
=
"true"
/>
</
mso
:
sharedControls>
</
mso
:
qat>
</
mso
:
ribbon>
</
mso
:
customUI>
Par exemple, la ligne :
<
mso
:
control
idQ
=
"mso:Camera"
visible
=
"true"
/>
correspond à une commande "appareil photo" placée dans la barre d'outils accès rapide.
Pour personnaliser l'image (Vous pouvez utiliser uniquement des images de la bibliothèque Office), ajoutez le paramètre imageMso dans le code xml.
<
mso
:
control
idQ
=
"mso:Camera"
imageMso
=
"PrintPreviewClose"
visible
=
"true"
/>
PrintPreviewClose correspond à l'ID d'une autre commande, et dont l'image sera utilisée pour s'afficher sur le bouton.
Attention à bien respecter la casse.
Pour trouver facilement l'ID de chaque contrôle du ruban et les réutiliser dans la barre d'outils accès rapide :
- Clique sur le bouton "Office".
- Clique sur le bouton "Options Excel".
- Menu "Personnaliser".
- Le volet Personnalisation permet d'accéder à tous les contrôles (visibles et masqués).
Les ID apparaissent dans une info-bulle lorsque tu passes le curseur sur les contrôles.
Consultez le tutoriel.
L'article est une présentation des options qui vous permettront de modifier la présentation du ruban, sous Excel 2007.
Custom UI Editor Tool afin de créer et modifier les fichiers customUI.xml (customUI.xml contient toutes les informations permettant la personnalisation du ruban, dans les classeurs enregistrés au nouveau format Office OpenXML).
Cet outil n'est plus disponible sur OpenXmlDevelopper.org
Vous devez aussi disposer du pack de redistribution .Net framework 2.
(Un lien de téléchargement est automatiquement proposé lors de l'installation de l'utilitaire de personnalisation).
Par exemple, après avoir installé Custom UI Editor Tool, créez un nouveau classeur et enregistrez le au
format xlsm (prenant en charge les macros).
Fermez le classeur (le fichier xml ne pourra pas être sauvegardé si le classeur est ouvert).
Lancez Custom UI Editor.
Utilisez le menu File/Open.
Recherchez votre classeur Excel sur le PC.
Cliquez sur le bouton Ouvrir.
Une page blanche s'affiche. Si votre classeur contenait déjà un ruban personnalisé, le contenu xml s'affichera à l'écran.
Collez le code xml suivant dans la fenêtre de l'éditeur :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<!-- Indiquez True pour masquer tous les autres onglets standards-->
<ribbon
startFromScratch
=
"false"
>
<tabs>
<!-- Crée un onglet personnalisé: -->
<!-- L'onglet va se positionner automatiquement à la fin du ruban. -->
<!-- Utilisez insertAfterMso="NomOngletPrédéfini" pour préciser l'emplacement de l'onglet -->
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<!-- Crée un groupe -->
<group
id
=
"Essai"
label
=
"Essai CustomUI"
>
<!-- Crée un bouton: -->
<!--onAction="ProcLancement" définit la macro qui va être déclenchée lorsque vous allez cliquer sur le bouton -->
<!--imageMso="StartAfterPrevious" définit une image de la galerie Office qui va s'afficher sur le bouton. -->
<!--(consultez la FAQ Excel "Comment retrouver l'ID de chaque contrôle du ruban ?" pour plus de détails). -->
<!-- Nota: il est aussi possible d'ajouter des images externes pour personnaliser les boutons -->
<button
id
=
"btLance01"
label
=
"Lancement"
screentip
=
"Déclenche la procédure."
onAction
=
"ProcLancement"
supertip
=
"Utilisez ce bouton pour Lancer la macro."
size
=
"large"
imageMso
=
"StartAfterPrevious"
/>
<!-- Crée un deuxième bouton -->
<button
id
=
"btAide01"
label
=
"Aide"
screentip
=
"Consultez l'aide."
onAction
=
"OuvertureAide"
size
=
"large"
supertip
=
"Consultez les meilleurs cours et tutoriels Office."
imageMso
=
"FunctionsLogicalInsertGallery"
tag
=
"https://office.developpez.com/"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Cliquez sur le bouton Generate CallBacks. Cette action va créer une macro pour chaque action (onAction) définie dans votre xml.
'Callback for btLance01 onAction
Sub
ProcLancement
(
control as
IRibbonControl)
End
Sub
'Callback for btAide01 onAction
Sub
OuvertureAide
(
control as
IRibbonControl)
End
Sub
Faites un Copier (Ctrl+C) des CallBacks pour les placer dans le presse papiers. Vous ajouterez ces macros ultérieurement dans un module standard de votre classeur.
Revenez sur l'onglet CustomUI.
Enregistrez les modifications xml.
Ouvrez votre classeur Excel.
Vous constatez qu'un nouvel onglet apparait dans le ruban.
Pour terminer, vous allez ouvrir l'éditeur de macros (Alt+F11).
Insérez un module standard.
Collez les CallBacks précédemment créés.
Il ne vous reste plus qu'à rédiger vos macros. Celles ci seront associées à l'évènement Clic sur les boutons du ruban.
Par exemple :
Option
Explicit
Private
Declare
Function
ShellExecute Lib
"shell32.dll"
Alias "ShellExecuteA"
_
(
ByVal
hWnd As
Long
, ByVal
lpOperation As
String
, ByVal
lpfile As
String
, _
ByVal
lpParameters As
String
, ByVal
lpDirectory As
String
, ByVal
nShowCmd As
Long
) As
Long
'Callback for btLance01 onAction
Sub
ProcLancement
(
control As
IRibbonControl)
MsgBox
"Opération 'Personnaliser le ruban' réussie !"
End
Sub
'Callback for btAide01 onAction
'Va ouvrir le lien indiqué dans le Tag du bouton (https://office.developpez.com/)
Sub
OuvertureAide
(
control As
IRibbonControl)
ShellExecute 0
&
, vbNullString
, control.Tag
, vbNullString
, vbNullString
, 0
End
Sub
Pour aller plus loin dans la personnalisation du ruban, consultez le tutoriel de Christophe Warin : Création de rubans personnalisés sous Microsoft Access 2007.
Vous pouvez en avoir besoin, pour par exemple spécifier la position d'un onglet personnalisé dans le ruban :
<!-- Va positionner l'onglet personnel après l'onglet Accueil (TabHome) -->
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
insertAfterMso
=
"TabHome"
visible
=
"true"
>
TabHome : onglet Accueil
TabInsert : onglet Insertion
TabPageLayoutExcel : onglet Mise en page
TabFormulas : onglet Formules
TabData : onglet Données
TabReview : onglet Révision
TabView : onglet Affichage
TabDeveloper : onglet Développeur
TabAddIns : onglet Compléments
Ajoutez la référence du groupe standard en indiquant: idMso="NomDuGroupe".
L'exemple suivant ajoute le groupe "Bibliothèque de fonctions" dans un onglet nommé "OngletPerso".
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<!-- Ajoute la bibliothèque de fonctions -->
<group
idMso
=
"GroupFunctionLibrary"
/>
<group
id
=
"Essai"
label
=
"Essai CustomUI"
>
<button
id
=
"btLance01"
label
=
"Lancement"
screentip
=
"Déclenche la procédure."
onAction
=
"ProcLancement"
supertip
=
"Utilisez ce bouton pour Lancer la macro."
size
=
"large"
imageMso
=
"StartAfterPrevious"
/>
</group>
</tab>
Vous remarquez la différence de syntaxe utilisée pour faire référence à des groupes standards (idMso) et pour les groupes que vous créez (id).
Vous pouvez télécharger la liste de tous les noms de groupes et contrôles, sur le site Microsoft :
2007 Office System Document: Lists of Control IDs
L'exemple suivant ajoute un groupe personnel dans l'onglet Accueil.
Spécifiez le nom de l'onglet Accueil (tab idMso="TabHome") dans le fichier xml CustomUI.xml puis
ajoutez les paramètres de création de ce nouveau groupe.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<!-- onglet Accueil -->
<tab
idMso
=
"TabHome"
>
<!-- Ajoute un groupe -->
<group
id
=
"Essai"
label
=
"Format exposant"
>
<!-- Crée un bouton: -->
<!--onAction="ProcLancement" définit la macro qui va être déclenchée lorsque vous allez cliquer sur le bouton -->
<button
id
=
"btLance01"
label
=
"Lancement"
screentip
=
"Format exposant."
onAction
=
"ProcLancement"
supertip
=
"Utilisez ce bouton pour transformer la sélection en exposant."
size
=
"normal"
imageMso
=
"ExponentiationSign"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Ajoutez la référence d'une commande standard en indiquant: button idMso="NomCommande".
L'exemple suivant ajoute le bouton "Insertion signe exposant" dans un groupe nommé "Format exposant". Ce groupe
sera accessible depuis l'onglet Accueil.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<!-- onglet Accueil -->
<tab
idMso
=
"TabHome"
>
<!-- Crée un groupe -->
<group
id
=
"Essai"
label
=
"Format exposant"
>
<!-- Ajoute le bouton "Insertion signe exposant" -->
<button
idMso
=
"ExponentiationSign"
size
=
"normal"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Vous remarquerez la syntaxe utilisée pour faire référence à des commandes standards: idMso.
Vous pouvez télécharger la liste de tous les noms de groupes et contrôles, sur le site Microsoft :
2007 Office System Document: Lists of Control IDs
Indiquez la valeur False au paramètre Visible de l'onglet à masquer, dans le fichier customUI.xml.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<!-- Indiquez True pour masquer tous les autres onglets standards-->
<ribbon
startFromScratch
=
"false"
>
<tabs>
<!-- Masque l'onglet Révision -->
<tab
idMso
=
"TabReview"
visible
=
"false"
/>
</tabs>
</ribbon>
</customUI>
Cet exemple désactive le bouton "Couleur de remplissage" en insérant des lignes suivantes dans le fichier CustomUI.xml.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<commands>
<!-- Désactive le bouton "Couleur de remplissage" -->
<command
idMso
=
"CellFillColorPicker"
enabled
=
"false"
/>
</commands>
<ribbon
startFromScratch
=
"false"
>
</ribbon>
</customUI>
Les paramètres Commands doivent être en début de fichier, et avant la ligne ribbon startFromScratch="boolean".
Vous remarquerez que cette action désactive le bouton, à la fois dans l'onglet "Accueil" et dans la mini barre d'outils.
Les commandes prédéfinies sont tous les contrôles contenus dans le ruban et qui permettent de
déclencher les fonctions de l'application Excel. Dans certains projets, vous pouvez être amenés à désactiver ou
réattribuer une procédure personnelle pour ces contrôles.
Cette modification doit être spécifiée dans le fichier xml de personnalisation :
<commands>
<command
idMso
=
"FindDialogExcel"
onAction
=
"MaRecherchePerso"
/>
</commands>
Ce code xml permet ensuite d'utiliser une fonction d'appel VBA (CallBack) dans votre classeur :
'Callback for FindDialogExcel onAction
Sub
MaRecherchePerso
(
control As
IRibbonControl, ByRef
cancelDefault)
End
Sub
Dans la documentation Microsoft, cette type de procédure est généralement appelée "onAction Repurposed". A la différence de l'attribut onAction que vous utilisez pour créer des contrôles personnels, cette fonction contient un deuxième argument : 'cancelDefault'.
Pour désactiver la commande prédéfinie, il suffit de spécifier cancelDefault =
True
.
Vous pouvez rédiger vos macros personnelles à la suite de cette ligne de code.
Pour réinitialiser la commande, indiquez cancelDefault =
False
.
'Callback for FindDialogExcel onAction
'Réattribue temporairement la commande 'Recherche' ou la réinitialise
'en fonction de la valeur de la variable boolResult (utilisation du tooggleButton)
Sub
MaRecherchePerso
(
control As
IRibbonControl, ByRef
cancelDefault)
If
boolResult Then
MsgBox
"Le bouton 'Recherche' est temporairement désactivé"
'Vous pouvez éventuellement ajouter vos procédures de
'recherches personnelles.
'
cancelDefault =
True
Else
cancelDefault =
False
End
If
End
Sub
L'exemple suivant ajoute un onglet 'test' qui contient un bouton bascule (toogleButton). Si vous cliquez
dessus, la commande prédéfinie 'Recherche' (onglet Accueil/groupe Edition) est désactivée. Réutilisez le bouton bascule
pour réinitialiser la commande 'Recherche'.
Placez ce code dans le fichier xml de personnalisation du classeur :
<
customUI xmlns=
"http://schemas.microsoft.com/office/2006/01/customui"
onLoad=
"RubanCharge"
>
<
commands>
<
command idMso=
"FindDialogExcel"
onAction=
"MaRecherchePerso"
/>
</
commands>
<
ribbon startFromScratch=
"false"
>
<
tabs>
<
tab id=
"Tab01"
label=
"Test"
>
<
group id=
"Groupe01"
label=
"essai de réattribution d'un contrôle prédéfini"
>
<
toggleButton id=
"ToggleButton01"
imageMso=
"SheetProtect"
size=
"large"
getLabel=
"MacroGetLabel"
onAction=
"ModifStatutBoutonRecherche"
/>
</
group>
</
tab>
</
tabs>
</
ribbon>
</
customUI>
Dans le module objet "ThisWorkbook" du classeur :
Option
Explicit
Private
Sub
Workbook_Open
(
)
boolResult =
False
End
Sub
Dans un module standard du classeur :
Option
Explicit
Public
boolResult As
Boolean
'Callback for customUI.onLoad
'Est déclenché lors du chargement du ruban personnalisé.
Sub
RubanCharge
(
ribbon As
IRibbonUI)
Set
objRuban =
ribbon
End
Sub
'Callback for ToggleButton01 onAction
'Récupère la valeur du bouton bascule puis désactive ou réinitialise la commande
'prédéfinie 'Recherche'
Sub
ModifStatutBoutonRecherche
(
control As
IRibbonControl, pressed As
Boolean
)
boolResult =
pressed
objRuban.Invalidate
End
Sub
'Callback for FindDialogExcel onAction
'Réattribue temporairement la commande 'Recherche' ou la réinitialise
'en fonction de la valeur de la variable boolResult (utilisation du tooggleButton)
Sub
MaRecherchePerso
(
control As
IRibbonControl, ByRef
cancelDefault)
If
boolResult Then
MsgBox
"Le bouton 'Recherche' est temporairement désactivé"
'Vous pouvez éventuellement ajouter vos procédures de
'recherches personnelles.
'
cancelDefault =
True
Else
cancelDefault =
False
End
If
End
Sub
'Callback for ToggleButton01 getLabel
'Attribue une étiquette au bouton bascule en fonction de sa position
Sub
MacroGetLabel
(
control As
IRibbonControl, ByRef
returnedVal)
If
boolResult Then
returnedVal =
"Bouton 'Recherche' Désactivié"
Else
returnedVal =
"Bouton 'Recherche' opérationnel"
End
If
End
Sub
Pour plus d'infos :
La personnalisation du ruban sous Excel 2007 - Club d'entraide des développeurs francophones
Cet exemple :
Crée un onglet personnel dans le ruban.
Remplit une combobox du ruban personnalisé à partir de cellules de la feuille de calcul.
Identifie la sélection d'un élément dans la combobox.
Insérez ce code dans le fichier CustomUI.xml d'un classeur Excel 2007, type xlsm :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<group
id
=
"Projet01"
label
=
"Projet 01"
>
<!-- getItemCount="NbItemCombo" va définir le nombre d'items dans la combobox. -->
<!-- getItemLabel="ComboLabel" permet d'alimenter la combobox. -->
<!-- onChange="ChangeCombo1" gère l'évènement 'Change' dans la combobox. -->
<comboBox
id
=
"Combo1"
label
=
"Choix : "
getItemCount
=
"NbItemCombo"
getItemLabel
=
"ComboLabel"
onChange
=
"ChangeCombo1"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans un module standard :
Option
Explicit
'Callback for Combo1 getItemCount
Sub
NbItemCombo
(
control As
IRibbonControl, ByRef
returnedVal)
'Définit le nombre d'éléments dans la combobox
returnedVal =
4
End
Sub
'Callback for Combo1 getItemLabel
'Index est défini par la valeur saisie dans Sub NbItemCombo (=4)
Sub
ComboLabel
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
'Alimente le Combobox à partir des données de la plage A1:A4
returnedVal =
Worksheets
(
"Feuil1"
).Cells
(
index +
1
, 1
)
End
Sub
'Callback for Combo1 onChange
Sub
ChangeCombo1
(
control As
IRibbonControl, text As
String
)
'Renvoie l'élément sélectionné dans la combobox
MsgBox
text
End
Sub
Remarque :
Vous pouvez également utiliser l'attribut invalidateContentOnDrop pour actualiser
automatiquement le contenu du contrôle lorsque celui-ci est sélectionné :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<group
id
=
"Projet01"
label
=
"Projet 01"
>
<!-- getItemCount="NbItemCombo" va définir le nombre d'items dans la combobox. -->
<!-- getItemLabel="ComboLabel" permet d'alimenter la combobox. -->
<!-- invalidateContentOnDrop="true" permet la mise à jour automatique du contrôle. -->
<comboBox
id
=
"Combo1"
label
=
"Choix : "
getItemCount
=
"NbItemCombo"
getItemLabel
=
"ComboLabel"
invalidateContentOnDrop
=
"true"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
'Callback for Combo1 getItemCount
Sub
NbItemCombo
(
control As
IRibbonControl, ByRef
returnedVal)
'Définit le nombre d'éléments dans la combobox
'Récupère le nombre de données dans la colonne A.
returnedVal =
Feuil1.Range
(
"A65536"
).End
(
xlUp).Row
End
Sub
'Callback for Combo1 getItemLabel
'Index est défini par la valeur saisie dans la fonction de rappel NbItemCombo
Sub
ComboLabel
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
If
Feuil1.Range
(
"A65536"
).End
(
xlUp).Row
=
0
Then
Exit
Sub
'Alimente le Combobox à partir des données de la plage de cellules
returnedVal =
Feuil1.Cells
(
index +
1
, 1
)
End
Sub
Dans cette procédure, le bouton (créé dans un onglet personnel) est activé uniquement si le contenu de la cellule A1 contient la valeur 1.
Insérez ce code dans le fichier CustomUI.xml :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
onLoad
=
"RubanCharge"
>
<!-- onLoad="RubanCharge" est déclenché lors du chargement du ruban personnalisé. -->
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<group
id
=
"Projet01"
label
=
"Projet 01"
>
<!-- onAction="ProcLancement" définit la macro déclenchée lorsque vos cliquez sur le bouton. -->
<!-- getEnabled="Bouton1_Enabled" gére la condition d'activation ou de désactivation. -->
<button
id
=
"Bouton1"
label
=
"Lancement"
onAction
=
"ProcLancement"
size
=
"normal"
imageMso
=
"Repeat"
getEnabled
=
"Bouton1_Enabled"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans un module standard :
Option
Explicit
Public
MonRuban As
IRibbonUI
Public
boolResult As
Boolean
'Callback for customUI.onLoad
'Est déclenché lors du chargement du ruban personnalisé.
Sub
RubanCharge
(
ribbon As
IRibbonUI)
boolResult =
False
Set
MonRuban =
ribbon
End
Sub
'Callback for Bouton1 onAction
'La procédure déclenchée lorsque vous cliquez sur le bouton.
Sub
ProcLancement
(
control As
IRibbonControl)
MsgBox
"ma procédure."
End
Sub
'Callback for Bouton1 getEnabled
'Active ou désactive le bouton en fonction de la variable boolResult
Sub
Bouton1_Enabled
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
boolResult
End
Sub
Dans le module objet Worksheet de la feuille (où vous allez modifier le contenu de la cellule A1):
Option
Explicit
'Evenement Change dans la feuille de calcul.
Private
Sub
Worksheet_Change
(
ByVal
Target As
Range)
'Vérifie si la cellule A1 est modifiée et si la cellule contient la valeur 1.
If
Target.Address
=
"$A$1"
And
Target =
1
Then
boolResult =
True
Else
boolResult =
False
End
If
'Rafraichit le bouton personnalisé
If
Not
MonRuban Is
Nothing
Then
MonRuban.InvalidateControl
"Bouton1"
End
Sub
Si vous avez créé plusieurs compléments .xlam dans Excel 2007 et que chacun d'entre eux contient un onglet personnel qui s'affiche dans le ruban, vous pouvez être intéressé de les regrouper dans un même onglet, lorsqu'ils sont ouverts simultanément.
Pour réaliser cette action, le fichier CustomUI.xml de chaque complément doit contenir certaines informations identiques :
Un nom identique (xmls:A="Mes macros complémentaires")
Un qualificateur identique (idQ="A:CibleAddIn")
L'attribut idQ (qualified ID) permet de spécifier un élément commun à plusieurs classeurs.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
xmlns
:
A
=
"Mes macros complémentaires"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
idQ
=
"A:CibleAddIn"
label
=
"Mes macros complémentaires"
visible
=
"true"
>
</tab>
</tabs>
</ribbon>
</customUI>
Vous pouvez ensuite ajouter les groupes et vos options personnelles dans chaque classeur. Par exemple :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
xmlns
:
A
=
"Mes macros complémentaires"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
idQ
=
"A:CibleAddIn"
label
=
"Mes macros complémentaires"
visible
=
"true"
>
<group
id
=
"Projet01"
label
=
"Projet 01"
>
<button
id
=
"btnLance01"
label
=
"Lancement 01"
onAction
=
"ProcLancement01"
size
=
"normal"
imageMso
=
"Repeat"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Désormais lorsque vous ouvrez un complément contenant l'attribut (idQ) commun, un nouveau groupe est ajouté dans l'onglet "Mes macros complémentaires".
Oui, le fichier xml de personnalisation peut effectuer cette opération. il suffit d'indiquer le nom du groupe
dans l'onglet de destination.
Cet exemple affiche le groupe 'Bibliothèque de fonctions' dans l'onglet 'Accueil'.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<!-- onglet Accueil -->
<tab
idMso
=
"TabHome"
>
<!-- Ajoute le groupe standard 'bibliothèque de fonctions' -->
<group
idMso
=
"GroupFunctionLibrary"
/>
</tab>
</tabs>
</ribbon>
</customUI>
Le contrôle gallery peut être alimenté par VBA grâce à la fonction d'appel getItemImage. Vous pouvez de cette manière définir chaque image qui va être associée à un élément de la galerie.
Ce code extrait les images .jpg contenues dans le répertoire spécial Windows "Mes images" (dont le chemin est généralement "C:\Documents and Settings\nom_utilisateur\Mes documents\Mes images"). Les images sont affichées dans la galerie sous forme de miniature. Chaque élément de la galerie possède une info-bulle qui contient des informations sur les propriétés des images listées.
La fonction getItemSupertip permet d'afficher les propriétés des fichiers (Date de création, modification, taille en ko, dimensions en pixels ...etc...) lorsque vous passez le curseur de la souris sur les images.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"Tab01"
label
=
"Browser d'images"
>
<group
id
=
"Groupe01"
label
=
"Mes images"
>
<gallery
id
=
"Galerie01"
label
=
"Affichez la prévisualisation d'images"
imageMso
=
"ObjectPictureFill"
columns
=
"3"
onAction
=
"ActionElementGalerie"
getShowImage
=
"MacroShowImage"
getShowLabel
=
"MacroShowLabel"
getItemCount
=
"MacroGetItemCount"
getItemImage
=
"MacroGetItemImage"
getItemLabel
=
"MacroGetItemLabel"
getItemScreentip
=
"MacroGetItemScreenTip"
getItemSupertip
=
"MacroGetItemSuperTip"
getItemHeight
=
"MacroGetItemHeight"
getItemWidth
=
"MacroGetItemWidth"
getSelectedItemIndex
=
"MacroSelItemIndex"
>
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans le module objet "ThisWorkbook" du classeur :
Option
Explicit
Option
Compare Text
Dim
x As
Integer
Private
Sub
Workbook_Open
(
)
Const
Cible =
&
H27 'définit le répertoire "Mes images"
Dim
objShell As
Object, objFolder As
Object
Dim
strFileName As
Object
Dim
Resultat As
String
Dim
i As
Integer
Set
objShell =
CreateObject
(
"Shell.Application"
)
Set
objFolder =
objShell.Namespace
(
Cible)
'Récupére le chemin du répertoire Windows "Mes images"
Chemin =
objFolder.Self.Path
'boucle sur tous les fichiers du repertoire
For
Each
strFileName In
objFolder.Items
'pour extraire uniquement les images type .jpg
If
strFileName.IsFolder
=
False
And
Right
(
strFileName, 4
) =
".jpg"
Then
x =
x +
1
ReDim
Preserve
Tableau
(
1
To
2
, 1
To
x)
'Enregistre le nom du fichier dans la premiere dimension du tableau
Tableau
(
1
, x) =
strFileName
Resultat =
""
'Boucle sur les propriétés de chaque fichier :
'ces informations seront affichées dans les infobulles des éléments de
'la galerie.
For
i =
0
To
34
If
objFolder.GetDetailsOf
(
strFileName, i) <>
""
Then
_
Resultat =
Resultat &
objFolder.GetDetailsOf
(
strFileName, i) &
vbLf
Next
'Enregistre les propriétés dans la deuxième dimension du tableau
Tableau
(
2
, x) =
Resultat
End
If
Next
End
Sub
Dans un module standard du classeur :
Option
Explicit
Public
Chemin As
String
Public
Tableau
(
) As
String
'Callback for Galerie01 onAction
'définit la procédure qui est déclenchée lorsque vous
'cliquez sur un élément de la galerie.
Sub
ActionElementGalerie
(
control As
IRibbonControl, id As
String
, index As
Integer
)
MsgBox
"Vous avez cliqué sur l'image '"
&
Tableau
(
1
, index +
1
) &
"'"
End
Sub
'Callback for Galerie01 getShowImage
'Définit si l'image de la galerie doit être affichée
Sub
MacroShowImage
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
True
End
Sub
'Callback for Galerie01 getShowLabel
'Définit si le label de la galerie doit être affichée
Sub
MacroShowLabel
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
True
End
Sub
'Callback for Galerie01 getItemCount
'Définit le nombre d'éléments de la galerie
'(la taille maxi du tableau = nombre de fichiers .jpg)
Sub
MacroGetItemCount
(
control As
IRibbonControl, ByRef
returnedVal)
'La variable VarTab doit impérativement être de type Variant.
Dim
VarTab As
Variant
On
Error
Resume
Next
'VarTab va prendre la valeur Empty si le tableau est vide.
VarTab =
UBound
(
Tableau)
On
Error
GoTo
0
If
IsEmpty
(
VarTab) Then
returnedVal =
0
Else
returnedVal =
UBound
(
Tableau, 2
)
End
If
End
Sub
'Callback for Galerie01 getItemImage
'Charge les images pour chaque élément de la galerie
Sub
MacroGetItemImage
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
Set
returnedVal =
LoadPicture
(
Chemin &
"\"
&
Tableau
(
1
, index +
1
))
End
Sub
'Callback for Galerie01 getItemLabel
Sub
MacroGetItemLabel
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
returnedVal =
Tableau
(
1
, index +
1
)
End
Sub
'Callback for Galerie01 getItemScreenTip
Sub
MacroGetItemScreenTip
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
returnedVal =
"Propriétés de '"
&
Tableau
(
1
, index +
1
) &
"'"
End
Sub
'Callback for Galerie01 getItemSuperTip
'Ajoute des informations sur les propriétés de l'image dans chaque infobulle
Sub
MacroGetItemSuperTip
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
returnedVal =
Tableau
(
2
, index +
1
)
End
Sub
'Callback for Galerie01 getItemHeight
'Définit la hauteur de l'image qui va s'afficher dans la galerie
Sub
MacroGetItemHeight
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
50
End
Sub
'Callback for Galerie01 getItemWidth
'Définit la largeur de l'image qui va s'afficher dans la galerie
Sub
MacroGetItemWidth
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
50
End
Sub
'Callback for Galerie01 getSelectedItemIndex
'Permet de définir un élément de la galerie (à partir de son index) qui sera sélectionné
'par défaut lors de l'ouverture.
Sub
MacroSelItemIndex
(
control As
IRibbonControl, ByRef
returnedVal)
'0 = le premier élément de la galerie
returnedVal =
0
End
Sub
Cet exemple présuppose bien entendu que le nombre d'images ne soit pas trop important et que leur taille en ko soit raisonnable ... ;o)
Le contôle 'editBox' ne possède pas de propriété passwordChar comme dans le contrôle ActiveX type TextBox, mais
vous pouvez utiliser cette procédure de substitution :
Vous cliquez sur les lettres qui s'affichent dans la galerie afin d'écrire votre mot de passe et celui ci s'affiche
sous forme astérisques dans un contrôle 'label'.
Dans le module objet "ThisWorkbook" du classeur :
Option
Explicit
'Définit les caractère utilisables pour la saisie du mot de passe
Private
Sub
Workbook_Open
(
)
Tableau =
Array
(
"A"
, "B"
, "C"
, "D"
, "E"
, "F"
, "G"
, "H"
, "I"
, "J"
, _
"K"
, "L"
, "M"
, "N"
, "O"
, "P"
, "Q"
, "R"
, "S"
, "T"
, "U"
, "V"
, _
"W"
, "X"
, "Y"
, "Z"
, "0"
, "1"
, "2"
, "3"
, "4"
, "5"
, "6"
, "7"
, "8"
, "9"
)
End
Sub
Dans un module standard du classeur :
Option
Explicit
Option
Base 1
Public
Cible As
String
Public
MonRuban As
IRibbonUI
Public
Tableau As
Variant
'Callback for customUI.onLoad
'Définit l'objet ruban
Sub
objRuban
(
ribbon As
IRibbonUI)
Set
MonRuban =
ribbon
End
Sub
'Callback for gallery01 getItemCount
'Définit le nombre d'élément dans la galerie
Sub
NbCaracteres
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
UBound
(
Tableau) +
1
End
Sub
'Callback for gallery01 getItemLabel
'Création des éléments dans la galerie
Sub
LabelCaractere
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
returnedVal =
Tableau
(
index)
End
Sub
'Callback for gallery01 onAction
'Met à jour le label après avoir sélectionné un caractère dans dans la galerie
Sub
SelectCaractere
(
control As
IRibbonControl, id As
String
, index As
Integer
)
Cible =
Cible &
Tableau
(
index)
MonRuban.InvalidateControl
"LC01"
End
Sub
'Callback for LC01 getLabel
'Affiche des asteriques dans le label en lieu et place des caractères
Sub
ContenuLabel
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
Application.WorksheetFunction.Rept
(
"*"
, Len
(
Cible))
End
Sub
'Callback for Bt01 onAction
'Validaton du mot de place
Sub
ValidationMdP
(
control As
IRibbonControl)
MsgBox
"Confirmation du mot de passe : ("
&
Cible &
")"
Cible =
""
MonRuban.InvalidateControl
"LC01"
End
Sub
'Callback for Bt02 onAction
'réinitialisation: Efface le contenu du label en cas d'erreur
'de saisie.
Sub
EffaceContenuLabel
(
control As
IRibbonControl)
Cible =
""
MonRuban.InvalidateControl
"LC01"
End
Sub
Dans le fichier xml de personnalisation :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
onLoad
=
"objRuban"
>
<ribbon>
<tabs>
<tab
id
=
"Essai"
label
=
"Essai"
>
<group
id
=
"MdP"
label
=
"Mot de passe"
>
<gallery
id
=
"gallery01"
size
=
"normal"
imageMso
=
"CalculateNow"
label
=
"Saisissez le mot de passe:"
columns
=
"6"
rows
=
"6"
getItemCount
=
"NbCaracteres"
showItemLabel
=
"true"
getItemLabel
=
"LabelCaractere"
screentip
=
"Sélectionnez les caractéres dans la galerie,
puis validez le mot de passe."
onAction
=
"SelectCaractere"
>
<button
id
=
"Bt02"
label
=
"Effacer la saisie."
imageMso
=
"ClearMenu"
onAction
=
"EffaceContenuLabel"
/>
</gallery>
<box
id
=
"Box01"
boxStyle
=
"horizontal"
>
<labelControl
id
=
"LC01"
getLabel
=
"ContenuLabel"
/>
</box>
<button
id
=
"Bt01"
imageMso
=
"FileStartWorkflow"
size
=
"normal"
label
=
"Validez le mot de passe"
visible
=
"true"
onAction
=
"ValidationMdP"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Une partie des attributs contenus dans le fichier xml de personnalisation peuvent être associés à des fonctions d'appel VBA. Les paramètres définis dans votre code xml sont alors liés à des procédures placées dans un module standard du classeur. Vous pouvez déclencher une macro depuis le ruban (à l'aide des événements onAction, onChange ...), mais également gérer dynamiquement, paramétrer et modifier les attributs des contrôles par VBA, en leur ajoutant le préfixe get.
La caractéristique d'un attribut getNomAttribut est de pouvoir mettre à jour dynamiquement sa
propriété NomAttribut.
Par exemple, au lieu d'indiquer le paramètre itemHeight=
"LaValeur"
explicitement
en dur dans le fichier xml de personnalisation, vous écrirez
getItemHeight=
"NomMacroDefinitionHauteurItem"
.
Ensuite, il vous restera à placer la fonction d'appel dans un module standard du classeur :Sub
NomMacroDefinitionHauteurItem
(
control As
IRibbonControl, ByRef
returnedVal).
Remarque :
Bien entendu les CallBacks ne fonctionnent pas si vous désactivez les macros à l'ouverture du classeur.
Pour qu'un fichier xml soit valide, le code doit respecter le schéma standard Office.
Excel propose un outil d'aide pour être informé des erreurs dans le fichier de personnalisation xml :
Utilisez le bouton Office
Bouton "Options Excel"
Menu "Options avancées"
Cochez l'option "Afficher les erreurs du complément d'interface utilisateur", dans la zone "Général".
Désormais, lorsque vous ouvrez le classeur, et si le fichier de personnalisation contient une erreur, un message s'affiche en précisant les numéros de ligne et de colonne posant soucis, ainsi qu'une description courte.
Oui, en indiquant la valeur "false" à l'attribut "enabled" à la commande "Help".
<
customUI xmlns=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<
commands>
<
command idMso=
"Help"
enabled=
"false"
/>
</
commands>
<
ribbon startFromScratch=
"false"
>
</
ribbon>
</
customUI>
Utilisez la méthode ExecuteMso.
Cet exemple affiche la boîte de dialogue "Insérer un graphique".
Application.CommandBars.ExecuteMso
(
"ChartTypeAllInsertDialog"
)
Pour retrouver l'ID de chaque contrôle du ruban :
Cliquez sur le bouton "Office".
Cliquez sur le bouton "Options Excel".
Menu "Personnaliser".
Le volet Personnalisation permet d'accéder à tous les contrôles (visibles et masqués).
Les ID apparaissent dans une info-bulle lorsque vous passez le curseur sur les contrôles.
Vous pouvez également trouver une liste complète des IDs sur le site de Microsoft :
2007 Office System Document: Lists of Control IDs
Non, ce n'est pas possible.
La description, qui contient le nom du classeur "source", permet d'identifier origine des boutons et
des contrôles personnalisés dans le ruban.
De cette manière, vous savez d'où sont issus les contrôles personnalisés, ce qui n'était pas toujours le cas
pour les menus et barres d'outils personnelles des versions précédentes.
Vous pouvez par la suite supprimer ou modifier le classeur qui présente le contrôle.
Le code startFromScratch="true" permet de masquer le ruban mais a aussi pour effet de perdre l'accès aux menus du bouton Office.
La solution consiste à spécifier dans le fichier xml de personnalisation quel menu du bouton Office doit être
visible, à placer entre les balises 'officeMenu'.
Cet exemple affiche le menu "Enregistrer sous" sous le bouton Office.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
>
<ribbon
startFromScratch
=
"true"
>
<officeMenu>
<button
idMso
=
"FileSaveAsOtherFormats"
label
=
"Enregistrer sous"
/>
</officeMenu>
</ribbon>
</customUI>
Les codes suivants sont placés dans un complément xlam. Ils gèrent un bouton personnalisé qui est ajouté dans Excel dès l'ouverture de l'application. Ce bouton est désactivé si aucun classeur n'est ouvert.
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
onLoad
=
"RubanCharge"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<group
id
=
"Essai"
label
=
"Essai CustomUI"
>
<button
id
=
"btLance01"
label
=
"Lancement"
onAction
=
"Hello"
getEnabled
=
"YaEnable"
supertip
=
"Utilisez ce bouton pour Lancer la macro."
size
=
"large"
imageMso
=
"StartAfterPrevious"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans le module ThisWorkbook :
Option
Explicit
Private
Sub
Workbook_Open
(
)
InitializeApp
End
Sub
Dans un module standard :
Option
Explicit
'Gestion des événements application
Dim
X As
New
EventClassModule
Public
objRuban As
IRibbonUI
'Callback for customUI.onLoad
'Est dclench lors du chargement du ruban personnalis.
Sub
RubanCharge
(
ribbon As
IRibbonUI)
Set
objRuban =
ribbon
End
Sub
Sub
InitializeApp
(
)
Set
X.App
=
Application
End
Sub
Public
Sub
Hello
(
control As
IRibbonControl)
MsgBox
"hello"
End
Sub
Sub
YaEnable
(
control As
IRibbonControl, ByRef
returnedVal)
returnedVal =
(
Workbooks.Count
>
0
)
End
Sub
Dans un module de classe nommé EventClassModule :
Option
Explicit
Public
WithEvents App As
Application
Private
Sub
App_WorkbookActivate
(
ByVal
Wb As
Workbook)
'Rafraichit le bouton personnalisé
If
Not
objRuban Is
Nothing
Then
objRuban.Invalidate
End
Sub
Private
Sub
App_WorkbookDeactivate
(
ByVal
Wb As
Workbook)
'Rafraichit le bouton personnalisé
If
Not
objRuban Is
Nothing
Then
objRuban.Invalidate
End
Sub
Les propriétés
GetEnabledMso
GetImageMso
GetLabelMso
GetPressedMso
GetScreenTipMso
GetSuperTipMso
GetVisibleMso
permettent de récupérer des informations sur les contrôles prédéfinis du ruban, par VBA.
Cet exemple lit les propriétés du contrôle "Coller" :
Sub
Test
(
)
Dim
NomControle As
String
NomControle =
"Paste"
MsgBox
ProprietesIdMso
(
NomControle), , "Propriétés du contrôle : "
&
NomControle
End
Sub
Function
ProprietesIdMso
(
strIdMso As
String
) As
String
Dim
Param As
Variant
Param =
"Label : "
&
Application.CommandBars.GetLabelMso
(
strIdMso) &
vbCrLf
Param =
Param &
"Activé : "
&
Application.CommandBars.GetEnabledMso
(
strIdMso) &
vbCrLf
'Attention, tous les contrôles n'ont pas de propriété "Pressed"
'Param = Param & Application.CommandBars.GetPressedMso(strIdMso) & vbCrLf
Param =
Param &
"Info bulle : "
&
Application.CommandBars.GetScreentipMso
(
strIdMso) &
vbCrLf
Param =
Param &
"Info bulle complémentaire : "
&
Application.CommandBars.GetSupertipMso
(
strIdMso) &
vbCrLf
Param =
Param &
"Visible : "
&
Application.CommandBars.GetVisibleMso
(
strIdMso) &
vbCrLf
ProprietesIdMso =
Param
End
Function
La propriété GetImageMso permet de récupérer l'image d'un contrôle.
La procédure suivante affiche l'icône du contrôle "Image" (onglet Insertion/Illustrations) dans un UserForm.
Private
Sub
CommandButton1_Click
(
)
Dim
NomControle As
String
Dim
Img As
IPictureDisp
NomControle =
"PictureInsertFromFile"
'GetImageMso(NomControle, largeur, hauteur)
Set
Img =
Application.CommandBars.GetImageMso
(
NomControle, 50
, 50
)
Set
Image1.Picture
=
Img
End
Sub
La méthode ExecuteMso permet d'exécuter une commande prédéfinie.
Sub
Declenchement_TransactionRuban
(
)
'Permet de passer en mode 'Mise en page'
Application.CommandBars.ExecuteMso
"HeaderFooterInsert"
End
Sub
Bien qu'elle devrait être activée par défaut, vérifiez que la bibliothèque "Microsoft Office 12.0 Object Library" est bien référencée.
Elle est nécessaire à votre projet lorsque vous personnalisez le ruban.
Dans l'éditeur de macros :
Menu Outils.
Références.
Cochez la ligne "Microsoft Office 12.0 Object Library".
Cliquez sur le bouton OK pour valider.
Insérez le code suivant dans le fichier xml de personnalisation :
<customUI
xmlns
=
"http://schemas.microsoft.com/office/2006/01/customui"
onLoad
=
"RubanCharge"
>
<ribbon
startFromScratch
=
"false"
>
<tabs>
<tab
id
=
"OngletPerso"
label
=
"OngletPerso"
visible
=
"true"
>
<group
id
=
"Projet01"
label
=
"Projet 01"
>
<!-- getItemCount="NbItemCombo" va définir le nombre d'items dans la combobox. -->
<!-- getItemLabel="ComboLabel" permet d'alimenter la combobox. -->
<!-- onChange="ChangeCombo1" gère l'évènement 'Change' dans la combobox. -->
<comboBox
id
=
"Combo1"
label
=
"Choix : "
getItemCount
=
"NbItemCombo"
getItemLabel
=
"ComboLabel"
onChange
=
"ChangeCombo1"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans le module objet ThisWorkbook du classeur :
Option
Explicit
Private
Sub
Workbook_Open
(
)
Dim
Chemin As
String
, Fichier As
String
Dim
i As
Integer
'Définit le répertoire contenant les fichiers
Chemin =
"C:\Documents and Settings\mimi\dossier\"
'Boucle sur tous les fichiers du répertoire.
Fichier =
Dir
(
Chemin &
"*.*"
)
Do
While
Len
(
Fichier) >
0
i =
i +
1
'écrit le résultat dans le tableau.
ReDim
Preserve
Tableau
(
1
To
i)
Tableau
(
i) =
Fichier
Fichier =
Dir
(
)
Loop
End
Sub
Dans un module standard du classeur :
Option
Explicit
Public
MonRuban As
IRibbonUI
Public
Tableau
(
) As
String
'Callback for customUI.onLoad
'Est déclenché lors du chargement du ruban personnalisé.
Sub
RubanCharge
(
ribbon As
IRibbonUI)
Set
MonRuban =
ribbon
End
Sub
'Callback for Combo1 getItemCount
Sub
NbItemCombo
(
control As
IRibbonControl, ByRef
returnedVal)
'Définit le nombre d'éléments dans la combobox
returnedVal =
UBound
(
Tableau)
End
Sub
'Callback for Combo1 getItemLabel
Sub
ComboLabel
(
control As
IRibbonControl, index As
Integer
, ByRef
returnedVal)
'Alimente le Combobox à partir des données du tableau
returnedVal =
Tableau
(
index +
1
)
End
Sub
'Callback for Combo1 onChange
Sub
ChangeCombo1
(
control As
IRibbonControl, text As
String
)
'Renvoie l'élément sélectionné dans la combobox
MsgBox
text
End
Sub
Les contrôles editBox, comboBox et gallery disposent de l'attribut sizeString.
Vous devez spécifier la valeur 4 à cet attribut afin de limiter la largeur d'une zone de texte pour un seul caractère :
<editBox
id
=
"MyEditBox"
sizeString
=
"4"
/>