Empêcher la suppression d'un onglet (sans le cacher)

pilote301152

XLDnaute Occasionnel
Bonjour,

Est-il possible d'empêcher à l'utilisateur d'effacer une feuille en particulier (sans bien sûr la rendre invisible!)?
pour ne pas être trompé par un rename de la feuille, j'ai bien pensé à utilisé sa référence Feuilx, mais je ne vois pas comment vérifier si l'utilisateur a sollicité un Delete ?

Merci de votre aide ...
 

MJ13

XLDnaute Barbatruc
Re : Empêcher la suppression d'un onglet (sans le cacher)

Bonjour Pilote

On double les posts ;).


Est-il possible d'empêcher à l'utilisateur d'effacer une feuille en particulier (sans bien sûr la rendre invisible!)?
pour ne pas être trompé par un rename de la feuille, j'ai bien pensé à utilisé sa référence Feuilx, mais je ne vois pas comment vérifier si l'utilisateur a sollicité un Delete ?

Peut-être en utilisant le codename de la feuille. Mais après, c'est pas évident. Tiens ça m'intéresse :).


 

PMO2

XLDnaute Accro
Re : Empêcher la suppression d'un onglet (sans le cacher)

Bonjour,

Votre question est ambiguë. Le titre parle de suppression d'une feuille alors que la suite parle d'effacement.

Je me suis occupé que de la suppression.

Copiez le code suivant dans la fenêtre de code de ThisWorkbook

Code:
'###########################################################
'--- Constante à adapter par le CodeName de la feuille   ---
'--- Dans le VBE, affichez l'Explorateur de projets pour ---
'--- y voir le CodeName de la feuille. Dans l'exemple,   ---
'--- CodeName = Feuil2 alors que Name = zaza             ---

Private Const FEUILLE_CODENAME As String = "Feuil2"
'###########################################################

Private WithEvents CBBEvents As CommandBarButton
 
Private Sub CBBEvents_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
If Ctrl.ID = 847 Then
  If ActiveSheet.CodeName = FEUILLE_CODENAME Then
    CancelDefault = True
    MsgBox "Interdiction de supprimer la feuille " & ActiveSheet.Name
  End If
End If
End Sub

Private Sub Workbook_Open()
Set CBBEvents = Application.CommandBars.FindControl(ID:=847)
End Sub


Adaptez la constante cernée par des ### comme expliqué dans le code.

J'utilise la propriété CodeName car si l'utilisateur modifie le nom de la feuille cela marchera quand même.

Cordialement.

PMO
Patrick Morange
 

pilote301152

XLDnaute Occasionnel
Re : Empêcher la suppression d'un onglet (sans le cacher)

Bonsoir PMO,

Salut l'artiste cela fonctionne parfaitement ! Un grand merci pour cette solution.
Maintenant pour mon info perso, quelle est la différence entre la suppression et l'effacement d'une feuille ? Sans doute effacement = destruction des data sur la feuille ? ...

Encore mille Mercis
 

job75

XLDnaute Barbatruc
Re : Empêcher la suppression d'un onglet (sans le cacher)

Bonsoir le fil,

Et bravo à Patrick pour sa solution.

En voici une autre, plus méchante, avec cette macro dans ThisWorkbook :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
On Error Resume Next
If IsError(Feuil2.Name) Then
  MsgBox "Vous avez supprimé une feuille protégée, Excel va être fermé !"
  Cancel = True
  Application.DisplayAlerts = False
  Application.Quit
End If
End Sub

Il vaut mieux bien sûr protéger le VBA par un mot de passe.

Fichier joint.

A+
 

Pièces jointes

  • Classeur(1).xls
    32 KB · Affichages: 285
  • Classeur(1).xls
    32 KB · Affichages: 287
  • Classeur(1).xls
    32 KB · Affichages: 309
Dernière édition:

job75

XLDnaute Barbatruc
Re : Empêcher la suppression d'un onglet (sans le cacher)

Re,

Autre solution, plus rapide et tout aussi radicale :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
If IsError(Feuil2.Name) Then
  MsgBox "Vous avez supprimé une feuille protégée, Excel va être fermé !"
  Application.DisplayAlerts = False
  Application.Quit
End If
End Sub

A+
 

Pièces jointes

  • Classeur(2).xls
    32.5 KB · Affichages: 220
  • Classeur(2).xls
    32.5 KB · Affichages: 195
  • Classeur(2).xls
    32.5 KB · Affichages: 218

job75

XLDnaute Barbatruc
Re : Empêcher la suppression d'un onglet (sans le cacher)

Bonjour le fil, le forum,

Si l'on n'aime pas la fermeture d'Excel :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
If IsError(Feuil2.Name) Then
  Application.OnTime Now, "ThisWorkbook.Ouvre"
  Me.Close False
End If
End Sub

Sub Ouvre()
Me.Activate
Feuil2.Activate
MsgBox "Les modifications ont été perdues..."
End Sub

Fichier (3).

A+
 

Pièces jointes

  • Classeur(3).xls
    31 KB · Affichages: 245
  • Classeur(3).xls
    31 KB · Affichages: 251
  • Classeur(3).xls
    31 KB · Affichages: 266

Dranreb

XLDnaute Barbatruc
Bonsoir.
Il y a quand même aussi ça, dans le module de la feuille qui est assez rigolo :
VB:
Option Explicit
Private Sub Worksheet_BeforeDelete()
   Me.Copy After:=Me
   End Sub
Devrait pouvoir s'étoffer pour remettre le même nom, mais ça ne suffirait pas à éviter des dégâts dans des formules d'autres feuilles …
VB:
Option Explicit
Private Sub Worksheet_BeforeDelete()
   Dim Nom As String
   Nom = Me.Name
   Me.Name = "En voie de suppression"
   Me.Copy After:=Me
   Me.Next.Name = Nom
   End Sub
 
Dernière édition:

ymanot

XLDnaute Occasionnel
Bonjour a tous
Bonjour job75
j ai bien aimé votre solution qui ferme excel apres un joli petit message.
dans a meme logique avez vous un complement qui permette a la fois d empecher la suppression d une page mais aussi d empecher toute modification dans les intitules de cette meme feuille? qui ferait aussi appel a une message box de type
"AVERTISSEMENT cette modification engrainera la perte des données saisies et l' arret d excel sans possibilité d'enregistrer le travail en cours"
laissant le choix a lutilisateur de revenir en arriere?

merci
 

job75

XLDnaute Barbatruc
Bonjour ymanot,

Ce que vous imaginez ne va pas du tout, on utilisera plutôt :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A1:J1]) Is Nothing Then Exit Sub 'plage interdite à adapter
Application.EnableEvents = False
Application.Undo 'annule la modification
Application.EnableEvents = True
End Sub
ou bien on protègera la feuille.

A+
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa