Protéger et sécuriser un classeur Excel : toutes les options

La sécurisation d'un classeur Excel est rarement une priorité... jusqu'au jour où un utilisateur écrase vos formules critiques ou modifie une structure de données que vous aviez mise des semaines à bâtir. Sur des projets industriels complexes, la protection n'est pas une option : c'est une nécessité.

Dans cet article, je vous présente les différentes couches de protection disponibles dans Excel, leurs forces, leurs faiblesses, et surtout comment les mettre en œuvre efficacement en VBA. Parce que oui, protéger manuellement 50 feuilles avec des paramètres spécifiques n'est pas une option viable.

Les niveaux de protection disponibles

Excel propose quatre niveaux de protection distincts, chacun répondant à un besoin spécifique :

Protection de la structure du classeur : empêche l'ajout, la suppression ou le renommage des feuilles. Utile quand votre architecture de classeur est figée et que toute modification casserait vos macros ou vos références.

Protection des feuilles : le niveau le plus utilisé. Permet de verrouiller les cellules tout en autorisant des actions spécifiques (tri, filtrage, insertion de lignes...). C'est votre première ligne de défense contre les modifications accidentelles.

Protection du projet VBA : protège votre code source par mot de passe. Indispensable si vous livrez des outils à des clients sans vouloir exposer votre propriété intellectuelle.

Chiffrement du fichier : impose un mot de passe à l'ouverture du classeur. La seule protection réellement robuste contre l'accès non autorisé, car elle chiffre l'intégralité du fichier.

Protéger les feuilles intelligemment

La protection de feuille basique est triviale. Ce qui fait la différence, c'est de configurer finement ce qui reste autorisé. Voici comment automatiser la protection de plusieurs feuilles avec des paramètres cohérents :

VBA
Option Explicit

Public Sub ProtegerFeuillesAvecOptions()
    On Error GoTo ErrHandler
    
    Dim ws As Worksheet
    Dim strMotDePasse As String
    
    strMotDePasse = "MonMotDePasseSecurise123"
    
    For Each ws In ThisWorkbook.Worksheets
        ' Déprotéger si déjà protégé
        If ws.ProtectContents Then
            ws.Unprotect Password:=strMotDePasse
        End If
        
        ' Protection avec options fines
        ws.Protect Password:=strMotDePasse, _
                   DrawingObjects:=True, _
                   Contents:=True, _
                   Scenarios:=True, _
                   UserInterfaceOnly:=True, _
                   AllowFormattingCells:=False, _
                   AllowFormattingColumns:=False, _
                   AllowFormattingRows:=False, _
                   AllowInsertingColumns:=False, _
                   AllowInsertingRows:=True, _
                   AllowInsertingHyperlinks:=False, _
                   AllowDeletingColumns:=False, _
                   AllowDeletingRows:=True, _
                   AllowSorting:=True, _
                   AllowFiltering:=True, _
                   AllowUsingPivotTables:=True
        
        ' Réactiver les macros malgré la protection
        ws.EnableOutlining = True
    Next ws
    
ExitHandler:
    Set ws = Nothing
    Exit Sub
    
ErrHandler:
    MsgBox "Erreur lors de la protection : " & Err.Description, vbCritical
    Resume ExitHandler
End Sub

Le paramètre UserInterfaceOnly:=True est capital : il permet à vos macros de modifier les cellules protégées tout en empêchant l'utilisateur de le faire manuellement. Sans ce paramètre, vos propres macros seront bloquées.

Verrouiller la structure et le projet VBA

Pour un classeur destiné à la production, verrouillez également la structure et votre code :

VBA
Option Explicit

Public Function SecuriserClasseurComplet(strMotDePasse As String) As Boolean
    On Error GoTo ErrHandler
    
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    ' Protection de la structure du classeur
    wb.Protect Password:=strMotDePasse, _
               Structure:=True, _
               Windows:=False
    
    ' Le projet VBA se protège via l'interface ou l'objet VBProject
    ' Attention : VBProject nécessite l'autorisation d'accès au modèle objet VBA
    ' (Fichier > Options > Centre de gestion de la confidentialité)
    
    With wb.VBProject
        .Protection.Lock = False
        .Protection.Lock = True
        .Protection.SetPassword strMotDePasse
    End With
    
    SecuriserClasseurComplet = True
    
ExitHandler:
    Set wb = Nothing
    Exit Function
    
ErrHandler:
    SecuriserClasseurComplet = False
    Resume ExitHandler
End Function

Attention : manipuler VBProject nécessite d'activer "Faire confiance au projet VBA" dans les options Excel. Sur des postes verrouillés en entreprise, cette option n'est pas toujours accessible.

Les limites à connaître

Soyons clairs : aucune protection par mot de passe dans Excel n'est inviolable. Des outils gratuits en ligne peuvent cracker les mots de passe de feuilles ou de structure en quelques secondes. Ces protections ne sont efficaces que contre les modifications accidentelles ou les utilisateurs non techniques.

Le seul vrai rempart, c'est le chiffrement du fichier complet (Fichier > Informations > Protéger le classeur > Chiffrer avec mot de passe). Même là, un mot de passe faible reste vulnérable aux attaques par force brute.

Pour des données réellement sensibles, privilégiez une architecture où Excel n'est qu'une interface, les données critiques étant stockées en base de données avec une gestion des droits au niveau serveur.

Conclusion

Protéger un classeur Excel, c'est comme verrouiller une maison : ça n'arrêtera pas un cambrioleur déterminé, mais ça découragera les opportunistes et évitera les accidents. Automatisez la protection via VBA, utilisez des paramètres cohérents, et pour les données sensibles, ne comptez pas uniquement sur Excel.