FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les barres d'outils et les menus personnalisés→Le ruban, la barre d'outils accès rapide et le bouton Office 2007- 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 SubEt 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 SubNota :
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 SubFaites 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 SubPour 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 SubDans 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 SubL'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 SubDans 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 SubPour 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 SubRemarque :
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 SubDans 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 SubDans 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 SubSi 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 SubDans 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 SubCet 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 SubDans 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 SubDans 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 SubDans 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 SubDans 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 FunctionLa 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 SubLa 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 SubDans 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" />





