/ / Supprimer la protection de la feuille pour PW uniquement lorsque AllowFiltering = True - excel, vba, excel-vba

Annuler la protection de la feuille pour PW uniquement lorsque AllowFiltering = True - excel, vba, excel-vba

J'ai deux sous-marins très simples pour protéger et déprotéger une feuille avec un mot de passe. Les subs fonctionnent parfaitement jusqu’à ce que j’ajoute le paramètre "AllowFiltering: = True".

Lorsque ce paramètre est ajouté, je suis invité à saisir un mot de passe pour déprotéger la feuille. Cependant, si j'appuie sur Annuler, la feuille n'est pas protégée (comme il se doit).

Par conséquent, l'invite de mot de passe semble complètement redondante, mais quelqu'un peut-il m'aider à m'en débarrasser?

Les deux sous-marins sont:

Sub LockSheet()

If ActiveSheet.Protect = False Then
ActiveSheet.Protect Password:="TopSecretPW", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End If

End Sub


Sub UnlockSheet()

If ActiveSheet.Unprotect = False Then
ActiveSheet.Unprotect Password:="TopSecretPW"
End If

End Sub

Si j'utilise cette macro - sans le paramètre AllowFiltering: = True - je ne suis pas invité à entrer un pw.

Sub LockSheet()

If ActiveSheet.Protect = False Then
ActiveSheet.Protect Password:="TopSecretPW", DrawingObjects:=True, Contents:=True, Scenarios:=True
End If

End Sub

Informations sur le bonus: Le filtre et la protection fonctionnent correctement avec le jeu de paramètres et je ne peux pas déprotéger la feuille du menu sans entrer le bon PW. C'est juste cette invite PW non invitée que je veux enterrer.

Réponses:

0 pour la réponse № 1

Le problème réside dans la manière dont vous vérifiez si la feuille est protégée. ActiveSheet.Protect est une méthode et non une propriété de l'objet de la feuille de calcul. À la place d'utiliser If ActiveSheet.Protect utilisation If ActiveSheet.ProtectContents. ProtectContents est une propriété de l'objet WorkSheet et renvoie true si la feuille est protégée et false si ce n'est pas le cas. Votre code révisé devrait ressembler à ceci:

Sub LockSheet()

If ActiveSheet.ProtectContents = False Then
ActiveSheet.Protect Password:="TopSecretPW", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End If

End Sub


Sub UnlockSheet()

If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect Password:="TopSecretPW"
End If

End Sub