Empêcher l'effacement d'un menu personnalisé

Comment empêcher l'effacement d'un menu personnalisé dans la barre de menu ? Le verrouillage de la feuille de calcul est inopérant.

Si tu veux qu'un menu que tu as créé s'affiche et se masque seulement dans un classeur, ou même mieux, seulement sur une feuille, il va falloir procéder par étapes.
D'abord tu mets ton menu dans une barre d'outils personnalisée que tu auras tout spécialement créée pour toi et tes éléments de menus. Disons que tu l'appelles la barre d'outils "Zaza". Ensuite tu vas chercher à ne l'afficher que quand tu actives une certaine feuille. Pour ça tu vas dans VBA, tu doubble cliques sur la feuille en question (dans la petite fenêtre de l'explorateur de projets), tu sélectionnes Worksheet dans la liste déroulante en haut à gauche. Tu disposes d'une sub WorksheetSelection_Change dont on se fiche éperdument, tu peux la virer.
Tu vas alors choisir dans la liste des événements, en haut à droite, l'événement Activate, puis l'événement Deactivate. Là ça nous intéresse. Dedans tu copies le code
Application.CommandBars("Zaza").Visible = True 'dans la Activate et
Application.CommandBars("Zaza").Visible = False 'dans la Deactivate
Là tu auras ta barre d'outils affichée seulement lorsque tu actives la feuille que tu as choisie. Enfin (oui oui tout arrive), tu voulais empêcher qu'on puisse patouiller ton petit menu à toi. Voilà comment tu pourrais bricoler ça. Dans un module normal, tu copies et tu exécutes ça :

sub MaZazaPerso()
 Application.CommandBars("Zaza").Protection = msoBarNoCustomize
 end sub

Il te suffit de l'exécuter une seule fois, ça reste. Tu peux virer la macro ensuite. On ne pourra plus enlever ou modifier des éléments dedans. Au cas où tu voudrais le faire un jour, il te faudrait exécuter une macro comme ça :

sub PatouillerZaza()
 Application.CommandBars("Zaza").Protection = msoBarNoProtection 'c'est risqué :-)
 end sub

Auteur :

Mots clefs associés à cette page : , , ,