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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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