Salut,
comme sur vbfrance on ne recule devant rien, et ce même devant l'impossible
Voici une méthode qui permet de détecter une tentative de suppression.
Cette méthode s’appuie sur l'evenement "clic" de la classe "Office.CommandBarButton"
le code qui suit est à coller dans le code de "ThisWorkBook"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit
Private Sub Workbook_Open()
'initialisation de la classe
Set XlAppli.XL = Excel.Application
Call XlAppli.InitClass
DoEvents
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'on vide la classe avant de sortir
Call viderclass
End Sub
Code à coller dans un module (par exemple: module1)
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit
Public XlAppli As New ClasseAppli, MyFileIsOpen As Boolean
Sub viderclass()
Call XlAppli.EmptyClass
End Sub
Code à coller dans un module de classe que tu renommes en "ClasseAppli"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit
Public WithEvents XL As Excel.Application
Dim ClassCmdBrBtn() As ClasseCommandeBarBouton, NbButton As Integer
'Permet de vider la classe
Public Sub EmptyClass()
Dim i As Integer
For i = 1 To NbButton
On Error Resume Next
Set ClassCmdBrBtn(i).BoutonBarre = Nothing
Next
End Sub
'Remplissage de la classe
Public Sub InitClass()
Dim i As Integer, j As Integer, k As Integer, MyCmdBar() As Object, CmdBtn As Object, IDAlreadyIn As Boolean
'liste des barres qui contiennent les boutons à ajouter à la classe
ReDim Preserve MyCmdBar(3)
Set MyCmdBar(0) = Application.CommandBars("Worksheet Menu Bar").Controls("&Edition") 'menu édition
Set MyCmdBar(1) = Application.CommandBars("Cell") 'menu contextuel de la feuille (clic droit dans la feuille)
Set MyCmdBar(2) = Application.CommandBars("Row")
j = 0
For k = 0 To 2
'on Ajoute à la classe le/les bouton(s) qui nous intéresses
For Each CmdBtn In MyCmdBar(k).Controls 'on boucle sur les controls
'les boutons qui nous intéresses seront repères par leur ID
Select Case CmdBtn.ID
Case 21, 292, 293, 478
IDAlreadyIn = False
'ici on vas vérifier si le bouton est déjà dans la classe
'évidemment seulement si il y déjà quelque chose dedans.
If j > 0 Then
For i = 1 To j 'on boucle sur la classe
If ClassCmdBrBtn(i).BoutonBarre.ID CmdBtn.ID Then IDAlreadyIn True
Next
End If
If IDAlreadyIn = False Then 'si le bouton n'est pas encore dans la classe
j = j + 1
ReDim Preserve ClassCmdBrBtn(j) 'on redimensionne la classe pour lui ajouter le bouton
Set ClassCmdBrBtn(j) = New ClasseCommandeBarBouton 'on creer l'intance
Set ClassCmdBrBtn(j).BoutonBarre = CmdBtn 'on ajoute le bouton
End If
End Select
Next
Next k
NbButton = j
End Sub
Code à coller dans un module de classe que tu renommes en "ClasseCommandeBarBouton"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit
Public WithEvents BoutonBarre As Office.CommandBarButton
Private Sub BoutonBarre_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
'Range("a2").Value = Ctrl.Caption
'Range("a3").Value = Ctrl.ID
' les captions des boutons qui nous intéresses sont : "&Supprimer...", "&Supprimer", "&Couper"
CancelDefault = True 'on désactive l'action du bouton
Action 'on lance notre propre action
End Sub
Sub Action()
'ici le code à exécuter en remplacement de l'action bouton
'pour la démo j'ai mis une boite de message
MsgBox "Vos droits sur ce fichier ne vous permettent pas d’accéder à ces fonctions !", vbExclamation
End Sub
une fois le code dans ton fichier, enregistre, ferme le fichier puis ouvre le à nouveau cela aura pour effet de charger la classe
A+