IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Excel

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022 

 
OuvrirSommaireLes barres d'outils et les menus personnalisésLe ruban, la barre d'outils accès rapide et le bouton Office 2007

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.

Créé le 20 août 2007  par SilkyRoad

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 :

Vba
Sélectionnez
Sub AfficherMasquer_OngletDeveloppeur()
    With Application
        If .ShowDevTools = False Then
            .ShowDevTools = True
            Else
            .ShowDevTools = False
        End If
    End With
End Sub
Mis à jour le 30 septembre 2007  par SilkyRoad

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.

Créé le 20 août 2007  par SilkyRoad

Sélectionnez le ruban et utilisez la molette centrale de votre souris pour passer d'un onglet à l'autre.

Créé le 2 octobre 2007  par SilkyRoad

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.

Image non disponible
Créé le 2 octobre 2007  par SilkyRoad

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).

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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.

Mis à jour le 26 mai 2008  par SilkyRoad

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

Créé le 5 décembre 2007  par SilkyRoad

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.

Créé le 5 décembre 2007  par SilkyRoad

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.

Créé le 5 décembre 2007  par SilkyRoad

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 :

Xml
Sélectionnez
<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 :

Xml
Sélectionnez
<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.

Xml
Sélectionnez
<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.

Créé le 19 février 2008  par SilkyRoad

Consultez le tutoriel.
L'article est une présentation des options qui vous permettront de modifier la présentation du ruban, sous Excel 2007.

Créé le 26 mai 2008  par SilkyRoad

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

Image non disponible

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 :

Xml
Sélectionnez
<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.

Vba
Sélectionnez
'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.

Image non disponible

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 :

Vba
Sélectionnez
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.

Comment retrouver l'ID de chaque contrôle du ruban ?

La FAQ Access2007: Programmation du ruban

Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

Vous pouvez en avoir besoin, pour par exemple spécifier la position d'un onglet personnalisé dans le ruban :

Xml
Sélectionnez
<!-- 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

Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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".

Xml
Sélectionnez
  <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

Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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.

Xml
Sélectionnez
<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>
Créé le 19 février 2008  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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.

Xml
Sélectionnez
<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

Créé le 19 février 2008  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

Indiquez la valeur False au paramètre Visible de l'onglet à masquer, dans le fichier customUI.xml.

Xml
Sélectionnez
<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>
Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

Cet exemple désactive le bouton "Couleur de remplissage" en insérant des lignes suivantes dans le fichier CustomUI.xml.

Xml
Sélectionnez
<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.

Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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 :

Xml
Sélectionnez
<commands> 
   <command idMso="FindDialogExcel" onAction="MaRecherchePerso" /> 
</commands>

Ce code xml permet ensuite d'utiliser une fonction d'appel VBA (CallBack) dans votre classeur :

Vba
Sélectionnez
'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.

Vba
Sélectionnez
'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 :

Vba
Sélectionnez
<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 :

Vba
Sélectionnez
Option Explicit
 
Private Sub Workbook_Open()
    boolResult = False
End Sub

Dans un module standard du classeur :

Vba
Sélectionnez
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

Personnalisation du ruban: Les fonctions d'appel CallBacks - Club d'entraide des développeurs francophones

Temporarily Repurpose Commands on the Office Fluent Ribbon

Créé le 20 septembre 2008  par SilkyRoad

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 :

Xml
Sélectionnez
<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 :

Vba
Sélectionnez
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é :

Xml
Sélectionnez
<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>
Vba
Sélectionnez
'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
Mis à jour le 26 mai 2008  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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 :

Xml
Sélectionnez
<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 :

Vba
Sélectionnez
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):

Vba
Sélectionnez
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
Créé le 5 décembre 2007  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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.

Xml
Sélectionnez
<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 :

Xml
Sélectionnez
<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".

Créé le 19 février 2008  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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'.

Xml
Sélectionnez
<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>
Créé le 26 mai 2008  par SilkyRoad

Lien : La personnalisation du ruban sous Excel 2007

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.

Xml
Sélectionnez
<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 :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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)

Créé le 20 septembre 2008  par SilkyRoad

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 :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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 :

Xml
Sélectionnez
<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,&#13;
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>
Créé le 20 septembre 2008  par SilkyRoad

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.

Consultez le tutoriel qui traite de ce sujet.

Créé le 20 septembre 2008  par SilkyRoad

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.

Créé le 20 septembre 2008  par SilkyRoad

Oui, en indiquant la valeur "false" à l'attribut "enabled" à la commande "Help".

Vba
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
<command idMso="Help" enabled="false"/>
</commands>
 
<ribbon startFromScratch="false">
</ribbon>
</customUI>
Créé le 20 septembre 2008  par SilkyRoad

Utilisez la méthode ExecuteMso.
Cet exemple affiche la boîte de dialogue "Insérer un graphique".

Vba
Sélectionnez
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

Créé le 20 septembre 2008  par SilkyRoad

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.

Créé le 20 septembre 2008  par SilkyRoad, Microsoft

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.

Xml
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
 
<officeMenu>
<button idMso="FileSaveAsOtherFormats" label="Enregistrer sous" /> 
</officeMenu>
</ribbon>
</customUI>
Créé le 18 novembre 2008  par SilkyRoad

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.

Xml
Sélectionnez
<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 :

Vba
Sélectionnez
Option Explicit
 
Private Sub Workbook_Open()
  InitializeApp
End Sub

Dans un module standard :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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
Créé le 18 novembre 2008  par JackOuYA

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" :

Vba
Sélectionnez
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.

Vba
Sélectionnez
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
Créé le 18 novembre 2008  par SilkyRoad

La méthode ExecuteMso permet d'exécuter une commande prédéfinie.

Vba
Sélectionnez
Sub Declenchement_TransactionRuban()
    'Permet de passer en mode 'Mise en page'
    Application.CommandBars.ExecuteMso "HeaderFooterInsert"
End Sub
Créé le 18 novembre 2008  par SilkyRoad

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.

Créé le 18 novembre 2008  par SilkyRoad

Insérez le code suivant dans le fichier xml de personnalisation :

Xml
Sélectionnez
<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 :

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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
Créé le 19 février 2009  par SilkyRoad

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 :

Xml
Sélectionnez
<editBox id="MyEditBox" sizeString="4" />
Créé le 19 février 2009  par Tofalu

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.