Déprotéger un classeur, Excel VBA

Déprotéger un classeur, Excel VBA

Voici une explication détaillée et un code en VBA pour déprotéger un classeur dans Excel.
Explication
Dans Excel, un classeur (ou une feuille de calcul) peut être protégé pour empêcher des utilisateurs non autorisés de faire des modifications. La protection est généralement appliquée avec un mot de passe, bien qu’il soit aussi possible de protéger sans mot de passe. Désprotéger un classeur ou une feuille nécessite de connaître le mot de passe (si un mot de passe a été défini) ou, dans le cas d’une protection sans mot de passe, il suffit d’utiliser la méthode Unprotect.
En VBA (Visual Basic for Applications), le code pour désprotéger un classeur est assez simple, mais vous devez prendre en compte à la fois la protection du classeur et la protection des feuilles, car ce sont des entités distinctes.

  • Protection du Classeur : Cela empêche l’utilisateur d’ajouter, déplacer, supprimer ou masquer des feuilles dans le classeur.
  • Protection des Feuilles : Cela empêche l’utilisateur de modifier le contenu des cellules d’une feuille, y compris la mise en forme et d’autres opérations.

Nous allons nous concentrer sur le déverrouillage du classeur et de ses feuilles dans cet exemple.
Code VBA : Désprotéger le Classeur
Voici le code VBA pour désprotéger un classeur et toutes ses feuilles :

Sub DesprotegerClasseur()
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim motDePasse As String
    ' Définir le mot de passe (si nécessaire)
    motDePasse = "VotreMotDePasse" ' Remplacez ceci par le mot de passe réel (si nécessaire)
    ' Référence au classeur actif
    Set wb = ThisWorkbook
    ' Désprotéger le classeur entier (pour permettre la modification de la structure du classeur comme l'ajout/suppression de feuilles)
    On Error Resume Next ' Ignorer les erreurs si le classeur est déjà désprotégé
    wb.Unprotect Password:=motDePasse
    On Error GoTo 0 ' Réinitialiser la gestion des erreurs
    ' Si le classeur était protégé, nous désprotégeons toutes les feuilles
    For Each ws In wb.Worksheets
        ' Tenter de désprotéger chaque feuille individuellement
        On Error Resume Next ' Ignorer les erreurs si la feuille est déjà désprotégée
        ws.Unprotect Password:=motDePasse
        On Error GoTo 0 ' Réinitialiser la gestion des erreurs
    Next ws
    MsgBox "Le classeur et toutes les feuilles sont désprotégés.", vbInformation
End Sub

Détail du Code
1. Définir le Mot de Passe :

  • motDePasse = « VotreMotDePasse » : Cette ligne définit le mot de passe utilisé pour la protection. Si aucune protection par mot de passe n’est appliquée, vous pouvez laisser cette variable vide ou la définir à une chaîne vide «  ».

2. Désprotéger le Classeur :

  • wb.Unprotect Password:=motDePasse : Cette ligne supprime la protection du classeur lui-même. Si un mot de passe est défini, il doit être fourni. Si le classeur n’est pas protégé, cette ligne sera simplement ignorée.
  • On Error Resume Next : Cette ligne permet d’ignorer les erreurs (par exemple, si le classeur est déjà désprotégé) et de continuer l’exécution du code. Cela évite d’interrompre le code à cause d’une erreur.
  • On Error GoTo 0 : Cela réinitialise la gestion des erreurs après avoir tenté de désprotéger le classeur.

3. Désprotéger les Feuilles :

  • For Each ws In wb.Worksheets : Cette boucle parcourt toutes les feuilles de travail du classeur.
  • ws.Unprotect Password:=motDePasse : Cette ligne supprime la protection de chaque feuille de travail. Si un mot de passe est défini, il doit être fourni ici. Si aucune protection par mot de passe n’est définie, vous pouvez simplement omettre cet argument.
  • Une fois de plus, On Error Resume Next et On Error GoTo 0 sont utilisés pour gérer les erreurs possibles si une feuille est déjà désprotégée.

4. Message de Confirmation :

  • MsgBox « Le classeur et toutes les feuilles sont désprotégés. », vbInformation : Une fois le classeur et toutes ses feuilles désprotégés, une boîte de message apparaît pour informer l’utilisateur que l’opération a réussi.

Remarques :

  • Gestion des Erreurs : La ligne On Error Resume Next est utilisée pour gérer les cas où le classeur ou les feuilles sont déjà désprotégés. Cela permet déviter que le code sarrête à cause dune erreur. Cependant, cela signifie que si une erreur survient (par exemple, un mot de passe incorrect), lerreur sera ignorée. En pratique, vous pourriez vouloir gérer les erreurs plus explicitement (par exemple, afficher un message derreur si le mot de passe est incorrect).
  • Gestion du Mot de Passe : Si aucun mot de passe nest défini, vous pouvez simplement omettre largument Password :=motDePasse. Toutefois, soyez prudent si un mot de passe est défini, car la désactivation de la protection ne fonctionnera pas sans le mot de passe correct.
  • Protection du Classeur vs Protection des Feuilles : Le classeur et les feuilles ont des mécanismes de protection distincts. Un classeur peut être protégé pour empêcher les utilisateurs de modifier la structure du classeur (par exemple, ajouter ou supprimer des feuilles), tandis que la protection des feuilles est utilisée pour empêcher les utilisateurs de modifier le contenu des cellules dune feuille.
  • Sécurité : Le code VBA peut être facilement consulté par toute personne ayant accès au fichier Excel, donc utiliser un mot de passe directement dans le code VBA nest pas la méthode la plus sécurisée, surtout si ce mot de passe nest pas crypté. Dans certains cas, vous souhaiterez peut-être demander un mot de passe de manière dynamique via une boîte de saisie.

Exemple avec une Demande de Mot de Passe Dynamique (Facultatif) :

Sub DesprotegerClasseurAvecDemande()
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim motDePasse As String
    ' Demander à l'utilisateur de saisir le mot de passe
    motDePasse = InputBox("Entrez le mot de passe pour désprotéger le classeur :")
    ' Référence au classeur actif
    Set wb = ThisWorkbook
    ' Désprotéger le classeur entier
    On Error Resume Next
    wb.Unprotect Password:=motDePasse
    On Error GoTo 0
    ' Désprotéger chaque feuille
    For Each ws In wb.Worksheets
        On Error Resume Next
        ws.Unprotect Password:=motDePasse
        On Error GoTo 0
    Next ws
    MsgBox "Le classeur et toutes les feuilles sont désprotégés.", vbInformation
End Sub

Dans cette version, un utilisateur est invité à saisir un mot de passe via une boîte de saisie, ce qui ajoute une couche de flexibilité à l’opération.
Conclusion :
Ce code montre comment désprotéger à la fois un classeur et toutes ses feuilles à l’aide de VBA. Il prend en charge la protection par mot de passe, la protection de la structure du classeur et la protection des cellules des feuilles. Cela peut être utile pour automatiser le processus de désactivation de la protection, surtout lorsqu’il s’agit de plusieurs feuilles dans un classeur.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x