[Excel 2007] Réattribuer une fonction perso à une commande prédéfinie du ruban

MichelXld

XLDnaute Barbatruc
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 :

Code:
   <commands> 
     <command idMso="FindDialogExcel" onAction="MaRecherchePerso" /> 
   </commands>


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

Code:
'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.
Pour réinitialiser la commande, indiquez cancelDefault = False.

Code:
'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
        'recherche 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 :

Code:
<customUI xmlns="" 
   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 :

Code:
Option Explicit
 
Private Sub Workbook_Open()
    boolResult = False
End Sub


Dans un module standard du classeur :

Code:
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
        'recherche 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

Ce lien n'existe plus
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 328
Membres
103 180
dernier inscrit
Vcr