[VBA] - "Interdire" la suppression d'une feuille

Bonsoir,

Étant donné qu'on ne peut pas bloquer la suppression d'une feuille uniquement, et que les différentes solutions que j'ai trouvé comportent des failles (la sélection de 2 feuilles permet la suppression de la feuille protégée par exemple) ou bien ne s’accommodent pas avec le fonctionnement de mon projet (certains UF se chargent à partir de données qui se trouvent dans la feuille, celle-ci ne doit pas être protégées pour permettre l'accès (pénible d'activer désactiver systématiquement) ou alors le fait que "Private Sub Worksheet_Activate" est activé avant "Private Sub Worksheet_Deactivate" ; et si on a un "Activesheet" dans l'évènement "Private Sub Worksheet_Activate", alors on a une erreur).

Ma solution a été de vérifier avant suppression le nom de la feuille et de la dupliquer avant sa suppression. Ça fonctionne, sauf si l'on supprime 2 feuilles en même temps, dont l'une des deux ne doit pas être supprimée.

Pour pallier à ça, j'ai un peu complexifié la macro en renommant temporairement les feuilles tout en les numérotant.

Je pensais que ces dernières seraient supprimées, mais non ! Si deux feuilles sont renommées avant leur suppression, alors la seconde n'est pas supprimée.

Bon, là en dernier recours, à moins que vous ayez une meilleure solution, j'ai voulu activer une macro de vérification 10 secondes après la suppression des feuilles afin de vérifier s'il n'existe pas un onglet nommé "Deleted", auquel cas, le supprimer.

Mais je n'arrive pas à faire fonctionner cette macro. Excel m'indique qu'elle n'existe pas... J'ai pourtant testé un code qui s'exécute en différé et il fonctionnait.

Voyez-vous ce qui pourrait clocher ?

Merci de votre attention :)

Bonne soirée !

Bonjour,
As-tu pensé à la protection du classeur ?
Cdlt.

Option Explicit

Public Sub ProtectWorkbook(bln As Boolean)
    ThisWorkbook.Protect Structure:=bln, Windows:=False
End Sub

Sub Test()
    ProtectWorkbook True    'ou False
End Sub

Bonjour,

C'est la première chose que j'ai testé. Ça fonctionne, sauf si on sélectionne 2 feuilles avant de les supprimer, à ce moment là, il n'y a plus de protection.

Ou bien, dans certaines feuilles j'ai des macros qui se présentent ainsi :

Private Sub Worksheet_Activate()
Call Decharge_Usf
UserForm_tableaux.Show 0
    With Sheets("JOINTURE")
        If .Cells(.Rows.Count, 1).End(xlUp).Row < 2 Then
            If Sheets("Options").Cells(71, 1) = 1 Then MsgBox "Veuillez importer des données (feuille ""HAB"") avant de travailler sur cette feuille.", vbInformation
        End If
    End With
ActiveSheet.Tab.ThemeColor = xlThemeColorAccent5
End Sub

La ligne :

UserForm_tableaux.Show 0

Retourne une erreur si la feuille "Options" (celle que je ne veux pas pouvoir supprimer) est protégée.

et la ligne :

ActiveSheet.Tab.ThemeColor = xlThemeColorAccent5

Retourne également une erreur, car l'évènement :

Private Sub Worksheet_Activate()

Est exécuté avant l'évènement

Private Sub Worksheet_Deactivate()

Ce qui fait que lorsqu'on quitte une feuille, cette dernière reste protégée et sa protection n'est retirée qu'après le chargement d'une autre feuille.

Bonne journée !

Bonjour,

Tu as peut-être vu trop compliqué.

Je viens de tester cette macro, basée sur ton code, mais "allégé". ça semble fonctionner.

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    If Sh.Name = "Options" Then
        Sh.Name = "truc"
        Sh.Copy After:=Worksheets("truc")
        ActiveSheet.Name = "Options"
    End If
End Sub

Dis nous. Peut-être (sûrement) que quelque chose m'échappe...

J'ai testé sur mon projet et ça fonctionne.

Étant donné que vous ne passez pas par une boucle, il n'y a pas de problème de noms d'onglets retrouvés plusieurs fois lors de la suppression de plusieurs onglets.

Du coup c'est beaucoup plus simple et ça fonctionne exactement comme je l'espérais !

Merci

Re,

Ça fonctionne, sauf si on sélectionne 2 feuilles avant de les supprimer

Chez moi, je n'ai pas ce souci ! La protection fait son job.
Cdlt.

Rechercher des sujets similaires à "vba interdire suppression feuille"