Vérifier si le classeur est déjà déprotégé

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

criscris11

XLDnaute Accro
Bonsoir à tous,
Encore une petite question concernant VBA.
J'utilise un code pour déprotégé l'ensemble des feuilles d'un classeur avec ce code :
Sub DeprotectionToutesLesFeuillesMDP()
Dim MyMtPss As String
MyMtPss = Application.InputBox("Mot de passe pour continuer")
If MyMtPss <> "chris" Then Exit Sub
MsgBox "Attention, toutes les feuilles vont être déprotégées"
Application.ScreenUpdating = False
Dim Feuil As Worksheet
For Each Feuil In Workbooks("Matrice BDD BCL.xls").Sheets
Feuil.Unprotect Password:="chris"
On Error GoTo Sortie
Suite:
Next Feuil
Exit Sub
Sortie:
MsgBox "La Feuille : " & Feuil.Name & " Est Protégée par UN AUTRE Mot de Passe"
GoTo Suite
End Sub

Dans d'autres macros, au début du code je lance la macro ci-dessus et j'aimerais savoir s'il était possible de tester si le classeur est déprotégé avant de lancer Application.Run "'Matrice BDD BCL.xls'!DeprotectionToutesLesFeuillesMDP" qui oblige l'utilisateur à ressaisir le mot de passe alors que le document est déjà déprotégé.

En espérant avoir été assez clair, merci d'avance et bonne soirée.
 
Re : Vérifier si le classeur est déjà déprotégé

Re, 😉

Tu peux faire comme ceci; en déclarant Public BonPass as string (Toujours non testé):
Code:
Sub DeprotectionToutesLesFeuillesMDP()
Dim MyMtPss As String
If IsEmpty(BonPass)=1 then
   MyMtPss = Application.InputBox("Mot de passe pour continuer")
   If MyMtPss = "chris" Then
      BonPass=MyMtPss
   Else
      Exit Sub
   End if
End if
MsgBox "Attention, toutes les feuilles vont être déprotégées"
Application.ScreenUpdating = False
Dim Feuil As Worksheet
For Each Feuil In Workbooks("Matrice BDD BCL.xls").Sheets
Feuil.Unprotect Password:="chris"
On Error GoTo Sortie
Suite:
Next Feuil
Exit Sub
Sortie:
MsgBox "La Feuille : " & Feuil.Name & " Est Protégée par UN AUTRE Mot de Passe"
GoTo Suite
End Sub
Ce qui t'évite de ressaisir le code s'il a déjà été saisi correctement une fois.
Cordialement🙂

Edit : à moins que ce ne soit :
Code:
If IsEmpty(BonPass)=0 then
Peut être faut il en fait déclarer : Public BonPass as variant pour que ça fonctionne correctement...
 
Dernière édition:
Re : Vérifier si le classeur est déjà déprotégé

Bonjour Cricris, Spitnolan

je sais pas si j'ai bien compris, ci dessous une autre solution afin de déterminer si le contenu d'une feuille est protégée, peut être que cela pourra t'aider :

Code:
If ActiveSheet.ProtectContents = True Then _
    MsgBox "feuille protégée"

bonne journée
@+
 
Re : Vérifier si le classeur est déjà déprotégé

Bonjour Spit, Pierrot,
Merci à tous les deux pour vos réponses.
Désolé Spit mais cela ne fonctionne pas comme je le souhaiterai car quand je lance ton code, cela me déprotège bien le classeur mais sans me demander le mot de passe. Suite à tes modifications, en mettant 0 à la place de 1 sur la ligne If IsEmpty(BonPass)=0 then, la macro me demande bien le mot de passe avant de déprotéger le classseur mais après je suis encore obligé de taper le mot de passe (alors que le classeur est déjà déprotégé).
Pierrot, oui c'est peut-être une piste : peux tu m'éclairer un petit peu plus.
Merci d'avance à tous les deux et bonne journée à tous.
 
Re : Vérifier si le classeur est déjà déprotégé

Re,
Bonjour Pierrot,

Je reviens toujours avec la même idée mais présentée de façon moins élégante et testée:
Après avoir mis dans ThisWorkbook une macro
Code:
Private sub Workbook_Open()
BonPass=""
End sub
dans module :
Code:
Public BonPass


Sub DeprotectionToutesLesFeuillesMDP()
Dim MyMtPss As String
If BonPass = "" Then
   MyMtPss = Application.InputBox("Mot de passe pour continuer")
   If MyMtPss = "a" Then
      BonPass = MyMtPss
   Else
      Exit Sub
   End If
End If
MsgBox "Attention, toutes les feuilles vont être déprotégées"
Application.ScreenUpdating = False
Dim Feuil As Worksheet
For Each Feuil In ActiveWorkbook.Sheets
Feuil.Unprotect Password:="a"
On Error GoTo Sortie
Suite:
Next Feuil
Exit Sub
Sortie:
MsgBox "La Feuille : " & Feuil.Name & " Est Protégée par UN AUTRE Mot de Passe"
GoTo Suite
End Sub

Bonne journée
 
Re : Vérifier si le classeur est déjà déprotégé

Re,

ce code te permet de savoir si la feuille active est protégée ou pas. Donc si elle est protégée tu lances ta macro de déprotection de toutes les feuilles, enfin si c'est ce que tu veux faire...

@+
 
Re : Vérifier si le classeur est déjà déprotégé

Re à tous les deux,
Spit : ce coup-ci cela fonctionne à part un petit détail : si le classeur est déprotégé et que je lance la macro, le message "Attention toutes les feuilles vont être déprotégées" apparaît alors qu'il n' y plus lieu d'être : peut on désactiver le message si le classeur est déjà déprotégé et le laisser si le classeur est protégé ?
Ou même avoir un message différent style : "Attention, toutes les feuilles sont déprotégées."
Merci d'avance.

Pierrot : je vais testé ton idée. Je suppose que l'on peut lfaire e test sur le classeur et non sur la feuille car toutes les feuilles sont protégées d'un coup : tu me diras cela doit revenir au même mais dans le cas où j'ai besoin de déprotéger qu'une seule feuille.
Merci d'avance.

Bon après-midi à tous.
 
Dernière édition:
Re : Vérifier si le classeur est déjà déprotégé

Re Cricris, Spitnolan

ce code teste une seule feuille, mais tu peux faire une boucle sur toutes les feuilles pour savoir lesquelles sont protégées ou pas, tout dépend de la finalité de ton projet et où tu veux en venir exactement.
A mon avis, on peut considérer que si l'on a le mot de passe pour une feuille, on l'a pour toutes les autres, enfin bon après c'est à toi de voir...

bon après midi
@+
 
Re : Vérifier si le classeur est déjà déprotégé

Re,
e message "Attention toutes les feuilles vont être déprotégées" apparaît alors qu'il n' y plus lieu d'être : peut on désactiver le message si le classeur est déjà déprotégé
En fait ton message ne sert pas à grand chose dans tous les cas puisque tu ne peux pas arrêter la macro avec ton code. Donc je te propose de le supprimer tout simplement. Ou de le remplacer par un UF non modal qui n'aura pas besoin d'action de l'utilisateur pour disparaitre.

Cordialement
 
Re : Vérifier si le classeur est déjà déprotégé

Re Pierrot,
Par défaut (à la sauvegarde du classeur) toutes les feuilles sont protégées.
Donc le but est de ne pas déprotéger le classeur s'il a été déprotégé avant?
Je ne sais pas si je suis assez clair, dans le doute n'hésites pas à me demander des renseignements supplémentaires.
Dans le cas où je viendrais à utiliser ta ligne de commande, où faut placer la commande dans mon code ?
Merci d'avance.
 
Re : Vérifier si le classeur est déjà déprotégé

Spit,
Oui d'accord avec toi. En ce qui concerne un USF non modal, de mémoire je ne sais si c'est réalisable avec 97 car mon fichier tourne sous 97 au boulot.
Affaire à suivre et merci pour tout.
Bon après-midi à toi et au forum.
 
Re : Vérifier si le classeur est déjà déprotégé

Re

tu peux placer la ligne de code ci dessous en premier dans ton code, mais le test n'est actif que sur la feuille active. Si la feuille n'est pas protégée tu sors de la sub...

Code:
If ActiveSheet.ProtectContents = False Then Exit Sub

@+
 
Re : Vérifier si le classeur est déjà déprotégé

Re,
de mémoire je ne sais si c'est réalisable avec 97 car mon fichier tourne sous 97 au boulot.
Ah oui, c'est vrai et si tu te rapelles ni JCGL, ni CHTI160 ni moi même n'avons 97...😉😛
Mais je crois que tu as raison, donc pas d'UF... mais ton MsgBox n'est pas bien utile non plus en l'état...
Donc soit tu le vires, soit tu passes à la méthode Pierrot.😀

ou bien dernière possibilité :
Code:
Sub DeprotectionToutesLesFeuillesMDP()
Dim MyMtPss As String
If BonPass = "" Then
   MyMtPss = Application.InputBox("Mot de passe pour continuer")
   If MyMtPss = "a" Then
      BonPass = MyMtPss
      MsgBox "Attention, toutes les feuilles vont être déprotégées"
   Else
      Exit Sub
   End If
End If
Application.ScreenUpdating = False
....
End Sub
Bien cordialement
 
Re : Vérifier si le classeur est déjà déprotégé

Re,
Merci à tous les deux pour vos solutions. Toutes les deux fonctionnent bien.
Pierrot, dans le cas où seule la feuille active est déprotégée, peut on déprotéger les autres d'où ton idée de faire une boucle sur les feuilles afin de savoir si elles sont protégées ou non et auquel cas les déprotégées avec mon code. C'est rarement le cas mais je préfère envisager cette possiblité.
Ou alors désactiver la déprotection sur la feuille active et forcer l'utilisateur à utiliser le code pour déprotéger toutes les feuilles.
Non, je ne suis pas parano mais j'ai déjà eu des mauvaises surprises pendant mon absence du bureau et ce fichier est vraiment important (base de données de 150 personnes environ).
Merci encore pour vos solutions et si jamais on peut aller un peu plus loin...
Bonne fin d'après-midi.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
810
Compte Supprimé 979
C
Réponses
2
Affichages
549
Réponses
5
Affichages
835
Réponses
19
Affichages
2 K
Retour