VBA : détecter les feuilles protégées

Bonjour à tous,

Je cherche un code balayant les feuilles du classeur et

indiquant les feuilles protégées.

J'ai essayé le code ci-dessous

mais le "If" n'agit pas et protège les feuilles sans passer par le MsgBox.

Sub TestFeuilles()
Dim i%
    For i = 1 To Worksheets.Count
        If Worksheets(i).Protect = True Then
            MsgBox ("feuille protégée")
        End If
    Next
End Sub

Une idée ?

Bonne journée

Claude

Bonsoir Claude,

Ce code pourrait convenir, si ce n'est qu'il a un petit défaut, il ne signalera pas que l'onglet est protégé si "TOUTES" les cellules sont "déverrouillées"....

Mais dans ce cas, pourquoi protéger la feuille (bref, je pense un cas pas si fréquent que cela....)?

Sub protegee_or_not()
Dim Sh As Worksheet
For Each Sh In Sheets
    If Not Sh.Cells.AllowEdit Then
        MsgBox "Feuille : " & Sh.Name & " protégée"
    End If
Next Sh
End Sub

ou autre option, plus fiable :

Sub protegee_or_not()
Dim Sh As Worksheet
For Each Sh In Sheets
    If Sh.ProtectContents Then
        MsgBox "Feuille : " & Sh.Name & " protégée"
    End If
Next Sh
End Sub

Bonne soirée

Bonjour et merci cousinhub,

Voici à peu près ce que je compte mettre en place en reprenant ton 2ème code,

Sub protegee_or_not()
Dim Sh As Worksheet, Cpt As Byte, Rep$
        For Each Sh In Sheets
            If Sh.ProtectContents Then
                Cpt = Cpt + 1
            End If
        Next Sh
    If Cpt > 0 Then
        Rep = InputBox("Ce classeur contient " & Cpt & " feuille(s) protégée(s)" & Chr(10) & _
        "entrez le mot de passe pour déprotéger" & Chr(10) & Chr(10) & _
        "Si protection sans mot de passe, tapez un caractère quelconque")
        If Rep = "" Then Exit Sub

        For Each Sh In Sheets
            If Sh.ProtectContents Then
                On Error GoTo Fin
                Sh.Unprotect Password:=Rep
            End If
        Next Sh
    End If
Exit Sub
Fin: MsgBox ("mot de passe non valide !")
End Sub

vois-tu des "contre-indication" ?

j'ai fait quelques tests sans problème, mais peut-être on peux mieux faire ?

Amicalement

Claude

édit: il s'agit d'une macro qui sera dans "PERSONAL.XLSB"

Re-,

je pense que tu auras des problèmes, s'il n'y a pas de mot de passe....

Pourquoi imposer un caractère quelconque?

Rep reprendra ce caractère, et donc le mot de passe sera faux.....

Ceci, sans tester...

re,

J'impose un caractère car si rien, c'est Exit Sub

l'aide en ligne dit pour l'argument "mot de passe" :

Si la feuille ou le classeur n'est pas protégé par un mot de passe, cet argument est ignoré.

ci-joint fichier test

Claude

94test-feuilles.zip (14.16 Ko)

Bonjour ,

Il parait que dubois est parti depuis 2012,

Dans ce classeur :

14test-feuilles.xlsm (23.42 Ko)

Feuile1 est protégée par mot de passe 11

Feuile2 est protégée par mot de passe 22

Feuile3 est protégée sans mot de passe

Feuile4 est protégée par mot de passe 44

On les déprotège une par une, celle dont on se trompe du mot de passe une 1ere fois il nous donne l’invite pour le taper la deuxième fois,

Celle protégé sans mot de passe on est pas obligé de taper un caractère.

Option Explicit
Sub protegee_or_not()
Dim Sh As Worksheet, Cpt As Byte, Rep$
        For Each Sh In Sheets
            If Sh.ProtectContents Then
                Cpt = Cpt + 1
            End If
        Next Sh

   If Cpt > 0 Then

        MsgBox "Ce classeur contient " & Cpt & " feuille(s) protégée(s)" & Chr(10) & _
        "il faut entrez le mot de passe pour chacune des feuiles protégées" & Chr(10) & _
        "Si protection sans mot de passe, ne tapper rien"

    For Each Sh In Sheets
     If Sh.ProtectContents Then
       Cpt = 1
       On Error Resume Next
         Do
          Rep = InputBox("Entrer mot de passe pour " & Sh.Name & IIf(Cpt = 1, "", ", pour la " & Cpt & " fois"), "MOT DE PASSE")
          Sh.Unprotect Password:=Rep
                    If Err.Number = 1004 Then
                        Cpt = Cpt + 1
                        MsgBox "Mot de passe erroné pour " & Sh.Name
                    End If
           Loop While Err.Number = 1004 And Cpt < 3
            Err.Clear

        End If
      Next Sh

    End If

End Sub

@ tt

Rechercher des sujets similaires à "vba detecter feuilles protegees"