Option Explicit
Private Sub Worksheet_BeforeDelete()
'--------------------------------------------------------
'INFORMATION: il n'est pas possible d'empêcher la suppression de la feuille,
'mais une copie complète en est faite, l'original est supprimé,
'la copie est renommée avec le nom de l'original
'--------------------------------------------------------
Dim MyName As String
Dim MyCodName As String
Dim Mywbk As Object, mySheet As Object
'* Capturez l 'original worksheet name
MyName = Application.ThisWorkbook.ActiveSheet.Name
Debug.Print MyName
If IsVBProjectProtected(Application.ThisWorkbook) Then ' (MACRO) pour déterminer si VBProject est protégé ou non
' is Protect then cancel is true pour cette tâche
Else
' n 'est pas protégé
Set mySheet = Application.ThisWorkbook.VBProject.VBComponents(Sheets(MyName).CodeName)
MyCodName = mySheet.Name
Debug.Print MyCodName
End If
Application.DisplayAlerts = False
'* Renommez le worksheet (Code Nom & feiulle Nom)
Application.ThisWorkbook.ActiveSheet.Name = VBA.Left(MyName, 30) + "old"
If IsVBProjectProtected(Application.ThisWorkbook) Then ' (MACRO) pour déterminer si VBProject est protégé ou non
' is Protect then cancel is true pour cette tâche
Else
' n 'est pas protégé
Application.ThisWorkbook.VBProject.VBComponents(Application.ThisWorkbook.ActiveSheet.CodeName).Name = MyCodName + "old"
End If
'* Créez une copie du worksheet
'ThisWorkbook.ActiveSheet.Copy After:=Sheets(ThisWorkbook.ActiveSheet.Index)
Application.ThisWorkbook.ActiveSheet.Copy before:=Sheets(Application.ThisWorkbook.ActiveSheet.Index)
'* Nommez la copie avec le nom d'origine
Application.ThisWorkbook.ActiveSheet.Name = MyName
If IsVBProjectProtected(Application.ThisWorkbook) Then ' (MACRO) pour déterminer si VBProject est protégé ou non
' is Protect then cancel is true pour cette tâche
Else
' n 'est pas protégé
Application.ThisWorkbook.VBProject.VBComponents(Application.ThisWorkbook.ActiveSheet.CodeName).Name = MyCodName
End If
MsgBox "Accès refusé: " & vbCrLf & vbCrLf & " • Vous ne pouvez pas supprimer cette feuille! ", vbCritical, " Autorisation en cours!"
Application.DisplayAlerts = True
If Not mySheet Is Nothing Then Set mySheet = Nothing
End Sub
Private Sub Worksheet_SelectionChange(ByVal target As Range) ' refuser le nom de la feuille de changement (uniquement le nom de la feuille - pas de nom de code)
If ThisWorkbook.ActiveSheet.Name <> "Feuille1" Then ' changez le nom de la feuille ici
On Error Resume Next
ThisWorkbook.ActiveSheet.Name = "Feuille1" ' changez le nom de la feuille ici
If Err.Number = 1004 Then GoTo exitSOS:
MsgBox "Accès refusé: " & vbCrLf & vbCrLf & " • Vous ne pouvez pas changer le nom de la feuille! ", vbCritical, " Autorisation en cours!"
On Error GoTo 0
End If
exitSOS:
Exit Sub
End Sub