Protéger plusieurs niveaus de protection selon les onglets

Signaler
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
-
Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020
-
Bonjour,

J'ai un fichier avec ajout d'un onglet via une macro par bouton.
Mon nouvel onglet s'insère en position 2 des onglets, il n'y as un accès de saisie que sur certaine cellules.
Mon souhaite serait qu'après la création de ce nouvel onglet, les onglets suivants soit protégé d'un niveau différent, c'est à dire qu'il n'y as pas possibilité de supprimer les données des autres onglets. ma méthode est d'empêcher la sélection des cellules verrouillés ou non verrouillées sur ces onglets.
cependant je n'arrive pas à l'ajouter dans ma macro de façon automatique à l'ensemble des autres onglets.
une idée?

voici le fichier:
https://www.cjoint.com/c/JJmneITmM1j

Configuration: Windows / Firefox 81.0

3 réponses

Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020
557
Bonjour,

une piste a mettre dans ThisWorkbook. Se déclenchera à chaque activation d'une feuille:


Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'ton code
End Sub


Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

Vous me conseillez d'utiliser cela pour faire le verrouillage automatique des autres onglets?
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

ok, ça marche presque, car du coup je bloque aussi mon nouvel onglet dès sa création.
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

J'ai tenté cela mais ça ne fonctionne pas.
le but étant d'appliquer le verrouillage au feuilles ne portant pas comme nom la date du jour.

Private Sub Workbook_Open()

Dim onglet As Worksheet

'boucle sur toutes les feuilles du classeur
For Each onglet In Application.ActiveWorkbook.Worksheets
If onglet.Name <> Format(Date, "dd-mm-yy") Then
ActiveSheet.Unprotect
ActiveSheet.protect DrawingObjects:=False, Contents:=True, Scenarios:=False

End If
Next onglet

End Sub
Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020
557
comme ceci:

Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim onglet As Worksheet
For Each onglet In Application.Worksheets
ActiveSheet.Protect
Next onglet
Sheets(Format(Date, "dd-mm-yy")).Unprotect
End Sub

Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

visiblement, l'avant dernière ligne ne lui plait pas.

" l'indice n'appartient pas à la sélection"
Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020
557 >
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

C'est normal si la feuille n'existe pas!

Pour y remédier 2 méthodes:

méthode radicale:

Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim onglet As Worksheet
On Error Resume Next
For Each onglet In Application.Worksheets
ActiveSheet.Protect
Next onglet
Sheets(Format(Date, "dd-mm-yy")).Unprotect
End Sub


méthode douce:

Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim onglet As Worksheet
For Each onglet In Application.Worksheets
ActiveSheet.Protect
Next onglet
For Each onglet In Application.Worksheets
If onglet.Name = Format(Date, "dd-mm-yy") Then
Sheets(Format(Date, "dd-mm-yy")).Unprotect
End If
Next onglet
End Sub


Voilà

@+ Le Pivert
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
>
Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020

Merci de votre temps.
Alors, je n'ai pas de bug, cependant cela ne protège pas les autres feuilles.

En plus, je crois que j'ai fait une erreur dans mon raisonnement qui va planter le truc.

L'autre solution serait de toujours déprotéger l'onglet en position 2 et de verrouiller tous les autres.
serait-ce plus simple?
Messages postés
6967
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 octobre 2020
557 >
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

Cela fonctionne chez moi!






voilà