Hello à tous,

Explication du contexte :

Suite à une petite Appli que j'ai faite en VBA, J'ai un classeur dans lequel j'ai une Feuille que j'ai nommé "Mon_Menu"

Dans celle-ci, j'ai mis des boutons qui exécutent du code vba quand on clique dessus.

Le pb est que cette feuille ("Mon_Menu") ne doit pas être supprimée pour pouvoir fonctionner. (normal, puisque c'est la feuille qui constitue le menu....)

En parcourant le net, j'ai réussi à détourner le menu "Supprimer" pour cette feuille qui porte le nom de "Mon_Menu".. (Feuille = Onglet)
Cad Désactivzer ces 2 Menus : Clic droit sur le nom de la Feuille (ou sur le Nom de l'Onglet)/Supprimer, ou Menu Edition/Supprimer Feuille

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
------------------------------------------------------------
Dans "ThisWorkbook"
Private Sub Workbook_Open()
'Appel de la procédure qui détourne le menu Supprimer Feuille d'Excel
ModifierSupprimerFeuille
End Sub

Public Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'Appel à la précédure qui permet de rétablir la configuration originale du menu d'Excel "Supprimer Feuille"
RetablirSupprimerFeuille
End Sub
------------------------------------------------------------

------------------------------------------------------------
Dans "Module1"
Sub ModifierSupprimerFeuille()
On détourne l'action originale de Supprimer Feuille du menu d'Excel (c.OnAction)
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = "SupFeuil"
Next c
End Sub

Sub SupFeuil()
'Ajout du message personnalisé quand on lance le menu de Suppression d'une Feuille
'Si cette Feuille se nomme "Mon_menu", On affiche un message et on bloque la Suppression
'Dans le cas contraire on redonne la main à l'utilisateur pour permettre la Suppression (ActiveSheet.Delete) 
If ActiveSheet.Name = "Mon_Menu" Then
   MsgBox "Vous ne pouvez pas supprimer cette feuille!", vbc + vbOKOnly + vbExclamation, "INFORMATION"
   Exit Sub
   Else
   ActiveSheet.Delete
   End If
  Exit Sub
End Sub

Sub RetablirSupprimerFeuille()
'Rétablissement à l'origine du menu Supprimer Feuille d'Excel
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = ""
Next c
End Sub
------------------------------------------------------------
Mon souci est aussi d’empêcher le renommage de cette Feuille car mon Code VBA est basé dessus...

Ayant pris comme base d'exemple de code VBA le Blocage du menu Supprimer, j'ai essayer d'adapter et faire de même pour bloquer le menu "Renommer Feuille"
Cad désactiver ces 2 Menus : Clic droit sur le nom de la Feuille (ou sur le Nom de l'Onglet)/Renommer, ou Menu Format/Feuille//Renommer

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
------------------------------------------------------------
Dans "ThisWorkbook"
Private Sub Workbook_Open()
'Appel de la procédure qui détourne le menu Renommer Feuille d'Excel
ModifierRenommerFeuille
End Sub

Public Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'Appel à la procédure qui permet de rétablir la configuration originale du menu d'Excel "Renommer Feuille"
RetablirRenommerFeuille
End Sub
------------------------------------------------------------

------------------------------------------------------------
Dans "Module1"
Sub ModifierRenommerFeuille()
On détourne l'action originale de Renommer Feuille du menu d'Excel (c.OnAction)
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=889)
c.OnAction = "Renfeuil"
Next c
End Sub

Sub RenFeuil()
'Ajout du message personnalisé quand on lance le menu de Renommage d'une feuille
'Si cette Feuille se nomme "Mon_menu", On affiche un message et on bloque le Renommage
'Dans le cas contraire on redonne la main à l'utilisateur pour permettre la renommage
If ActiveSheet.Name = "Mon_Menu" Then
   MsgBox "Vous ne pouvez pas renommer cette feuille!", vbc + vbOKOnly + vbExclamation, "INFORMATION"
   Exit Sub
   Else
   ActiveSheet.ReName
   End If
  Exit Sub
End Sub

Sub RetablirRenommerFeuille()
'Rétablissement à l'origine du menu Renommer Feuille d'Excel
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=889)
c.OnAction = ""
Next c
End Sub
------------------------------------------------------------
Pour le code "ID:=889", j'ai réussi à le trouver ici
ce qui me bloque, c'est la ligne à mettre dans le code qui permet de lancer le menu de Renommage d'une feuille
=> dans la procédure Sub RenFeuil(), "ActiveSheet.ReName" ne fonctionne pas.
(j'ai tenté cette ligne de commande car je n'ai pas trouvé la commande sur le Net)

Pour Explication :
En VBA, pour lancer le menu d'Excel de suppression d'une feuille, c'est "ActiveSheet.Delete"
Pour lancer le Menu de Renommage d'une feuille ???
Je ne suis pas arrivé a trouver la bonne commande

d'où cette tentative..."ActiveSheet.Rename", mais cela passe pas...
Cela doit être autre chose mais quoi ????

Attention :
Par cette commande, je souhaite faire "comme si" l'utilisateur faisait "clic droit sur le Nom de la feuille/Renommer", cela met alors le Nom de la Feuille en Blanc sur Fond Noir et permet à l'utilisateur de mettre un autre nom...si il le désire...
Allure d'une Feuille ou Onglet "Normal" :
Allure d'une Feuille ou Onglet suite à un "Clic droit/Renommer" :

Donc, suite à cette ligne de commande, je souhaite avoir Le Nom de la Feuille en Blanc sur Fond Noir, un point c'est tout, ensuite, c'est l'utilisateur qui décide de la suite a donner..

D'où ma question...
Y aurait-il une âme charitable pour me donner le nom de cette commande...
j'ai essayé de chercher sur le net à propos de c.OnAction mais je n'ai rien trouvé ....

Merci donc a ceux qui pourront me donner ce coup de main...
car j'avoue que là, ....je fais de très grandes brasses.......
Et au cas ou.... un lien pour avoir des infos sur ces "c.OnAction"

Merci de votre Aide.