Activation conditionnelle d'un bouton dans un ruban personnalisé

gringoh

XLDnaute Junior
Bonjour le forum ;-)

Il y a bien longtemps que je n’ai pas eu besoin de vos lumières, mais là je bloque sérieusement depuis 2 jours sur cette macro…

Je viens de me lancer dans le développement d’un ruban personnalisé et j’ai besoin de vos lumières concernant la protection de certaines fonctionnalités.

Je me suis inspiré des codes proposés à ces adresses :

[Excel2007] Activation conditionnelle d'un bouton dans un ruban personnalisé - Forum des professionnels en informatique

et la :

Personnalisation du ruban: Les fonctions d'appel CallBacks

Ci-joint le début du code qui ne pose pas de problème :

Option Explicit

Public MonRuban As IRibbonUI
Public boolResult As Boolean

'Chargement du ruban
Sub onLoad(ribbon As IRibbonUI)
boolResult = False
Set MonRuban = ribbon
End Sub

Sub Menu_control(control As IRibbonControl, ByRef returnedVal)
returnedVal = boolResult
End Sub

Et la, la partie du code pour tester l'activation :

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 Noel.
If Target.Address = "$A$1" And Target = "Noel" Then
boolResult = True
Else
boolResult = False
End If

'Rafraichit le bouton personnalisé
If Not MonRuban Is Nothing Then MonRuban.InvalidateControl "Bouton1"
End Sub

D’après les exemples proposés, il faut ajouter le code dans le module worksheet de la feuille XLAM, ce que j’ai fait. Lorsque j’ouvre le classeur, si je change la valeur de la cellule en A1 et que je mets Noel pas de problème le ruban s’active pour une utilisation de la fonction personnalisée.

Maintenant ce que je souhaite c’est pouvoir mettre ce Noel une bonne fois pour toute sans faire appel au « Worksheet_Change »… et je ne sais pas par quoi le remplacer.

Ma première idée serait de remplacer cette partie du code :

Sub Menu_control(control As IRibbonControl, ByRef returnedVal)
returnedVal = boolResult
End Sub

par quelque chose comme cela pour tester l'activation par une macro :

'Sub Menu_control(control As IRibbonControl, ByRef returnedVal)
'returnedVal = Test_autorisation()
'End Sub

et ensuite de rajouter ce test pour l'activation :

Sub Test_autorisation(myRibbon As IRibbonUI)
If Range("A1") = "Noel" Then
boolResult = True
Else
boolResult = False
If Not MonRuban Is Nothing Then MonRuban.InvalidateControl "MakeTick"
End If
End Sub

En faisant ainsi ca permettrait 2 choses :

1 - Valider l'utilisation du ruban personnalisé une fois pour toute
2- Valider plusieurs boutons d'un coupr sans avoir à rajouter à chaque fois cette instruction :

If Not MonRuban Is Nothing Then MonRuban.InvalidateControl "Bouton1"

Je joint un fichier à ce mail ce sera peut-être plus clair, à noter qu'il s'agit d'un fichier xlsm dans la mesure ou j'ai démasqué la feuille 1 de la macro complémentaire.

Merci d’avance pour votre aide,

Gringoh
 

Pièces jointes

  • Mon ruban.xlsm
    34.2 KB · Affichages: 96
Dernière édition:

gringoh

XLDnaute Junior
Re : Activation conditionnelle d'un bouton dans un ruban personnalisé

Bonjour,

J'ai essayé pas mal de choses mais je coince vraiment sur l'activation ou non du menu.

L'idée est d'avoir 2 profils d'utilisateurs qui auront accès ou non au ruban...

J'ai parcouru pas mal de fils sur différents forum et je n'ai pas trouvé de solution.

Pour résumer, l'idée est de mettre le contrôle dans la cellule A1 de la feuille et si la valeur est vrai alors le menu s'active.

Si vous avez la moindre idée, je suis preneur.

Merci et bonne journée à tous.

Gringoh
 

Statistiques des forums

Discussions
312 112
Messages
2 085 409
Membres
102 884
dernier inscrit
Macarena