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 :
Ce code xml permet ensuite d'utiliser une fonction d'appel VBA (CallBack) dans votre classeur :
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.
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 :
Dans le module objet "ThisWorkbook" du classeur :
Dans un module standard du classeur :
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
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