Excel · VBA · A3iformations

Protéger son code VBA : verrouiller le projet et exiger un mot de passe

Un classeur avec des macros circule : collègues, clients, stagiaires. Sans précaution, chacun peut lire le code, le modifier par erreur, ou lancer une macro qui efface des données. Protéger son code VBA se fait à deux niveaux : verrouiller le projet pour que le code ne soit plus visible, et contrôler l’exécution par un mot de passe, une liste d’utilisateurs ou la protection des feuilles. Les simulateurs reproduisent la fenêtre Propriétés de VBAProject, la liste des macros (Alt+F8) et le débogueur. Voir aussi MsgBox et InputBox, la gestion des erreurs et les formulaires UserForm.

Propriétés de VBAProjectVerrouiller
Private, Option Private ModuleMasquer
InputBox, EnvironMot de passe
Protect, UnprotectFeuilles
1

Comment protéger l’accès au code VBA

Le code d’un classeur appartient à son projet VBA (VBAProject), visible dans l’explorateur de projet de l’éditeur (Alt+F11). Le verrouiller par mot de passe empêche d’afficher et de modifier les modules, les formulaires et les propriétés du projet. Les macros, elles, continuent de fonctionner normalement.

Verrouiller le projet pas à pas

  1. Ouvrez l’éditeur VBA avec Alt + F11.
  2. Dans l’explorateur de projet, cliquez avec le bouton droit sur VBAProject (Formation.xlsm) › Propriétés de VBAProject, ou passez par le menu Outils › Propriétés de VBAProject.
  3. Onglet Protection : cochez Verrouiller le projet pour l’affichage.
  4. Saisissez le mot de passe dans Mot de passe puis dans Confirmer le mot de passe, et validez par OK.
  5. Enregistrez le classeur au format .xlsm (Classeur Excel prenant en charge les macros).
  6. Fermez puis rouvrez le classeur : la protection ne s’applique qu’à la prochaine ouverture.
Simulateur : verrouiller le projet VBAProject, enregistrer, fermer et rouvrir
La protection n’est pas immédiateJuste après OK, le code reste visible : c’est voulu, vous êtes l’auteur. Il faut enregistrer, fermer et rouvrir le classeur pour que le projet soit verrouillé.
Jamais en .xlsxUn classeur .xlsx ne peut pas contenir de code : en répondant Oui au message d’Excel, tous les modules sont perdus à la fermeture. Enregistrez en .xlsm, .xlsb ou .xlam.
Cocher la caseUn mot de passe sans « Verrouiller le projet pour l’affichage » protège seulement la fenêtre Propriétés : le code reste lisible.
Case « Verrouiller »Mot de passeRésultat à la réouverture
CochéeOuiProjet replié, mot de passe demandé pour voir le code : protection complète
Non cochéeOuiCode visible et modifiable ; seule la fenêtre Propriétés du projet est protégée
CochéeNonRefusé par l’éditeur : un mot de passe est obligatoire
Non cochéeNonAucune protection

Masquer ses macros de la liste Alt+F8

Verrouiller le projet cache le code, mais toutes les macros restent proposées dans Développeur › Macros (Alt+F8). Pour qu’un utilisateur ne lance pas une procédure interne, on la retire de cette liste : Private Sub, un argument, ou Option Private Module en tête de module.

Simulateur : quelles procédures apparaissent dans la liste des macros ? (le code est modifiable)
ÉcritureListe Alt+F8Appel depuis un autre module
Sub Macro() ou Public Sub Macro()VisibleOui
Private Sub Macro()MasquéeNon, seulement dans son module
Sub Macro(Optional x As Boolean)MasquéeOui
Option Private Module en tête du moduleToutes masquéesOui, à l’intérieur du projet
Function Calcul()Jamais listéeOui (si Public)
Ce que la protection ne fait pasLe mot de passe du projet n’est pas un chiffrement : des outils le contournent. Il évite les modifications accidentelles et la curiosité, pas un pirate déterminé. Ne mettez jamais de données confidentielles dans le code.
Gardez une copieAucun moyen officiel de récupérer un mot de passe oublié : conservez une version non protégée du classeur et notez le mot de passe dans un gestionnaire de mots de passe.
Signer son codePour prouver l’origine des macros, signez le projet avec un certificat (Outils › Signature électronique ; SelfCert.exe pour un certificat de test). Toute modification du code supprime la signature.
2

Empêcher l’exécution de code par mot de passe

Le verrouillage du projet n’empêche pas l’exécution. Pour réserver une macro sensible (suppression, mise à jour des tarifs, paie), on place un contrôle au début de la procédure : si la condition n’est pas remplie, Exit Sub quitte avant toute action. Le contrôle peut être un mot de passe saisi, le nom de l’utilisateur Windows, ou la protection de la feuille elle-même.

Demander un mot de passe avant d’exécuter

Sub Effacer_Stagiaires()
    Dim mdp As String
    mdp = InputBox("Mot de passe :", "Action protégée")
    If mdp <> "Form26" Then
        MsgBox "Mot de passe incorrect : action annulée.", vbCritical
        Exit Sub
    End If
    Range("A2:C5").ClearContents
End Sub
Simulateur : mot de passe, essais, casse et utilisateurs autorisés
TechniqueInstructionÀ savoir
Mot de passe saisiInputBox + If … Then Exit SubLa saisie s’affiche en clair à l’écran
Saisie masquéeUserForm avec une TextBox PasswordChar = "*"Voir la page sur les formulaires UserForm
Nombre d’essaisDo … Loop Until essai = 3Prévoir le cas Annuler (chaîne vide)
Casse= ou StrComp(a, b, vbBinaryCompare)Respecte les majuscules (comportement par défaut)
Sans la casseStrComp(a, b, vbTextCompare) = 0Pour des noms d’utilisateurs
Utilisateur WindowsEnviron("USERNAME")Aucun mot de passe à retenir
Nom dans OfficeApplication.UserNameModifiable par l’utilisateur : peu fiable
À l’ouvertureWorkbook_Open + ThisWorkbook.CloseSans effet si les macros sont désactivées
Verrouillez aussi le projetUn mot de passe écrit dans le code (Const MDP = "Form26") est lisible par quiconque ouvre l’éditeur. Le contrôle par mot de passe n’a de sens que si le projet VBA est verrouillé.
Saisie masquéeInputBox ne sait pas masquer le texte. Pour afficher des étoiles, créez un petit UserForm avec une zone de texte dont la propriété PasswordChar vaut « * ».

Protéger les feuilles par le code

Protéger la feuille par macro empêche l’utilisateur de modifier les cellules verrouillées. Mais une feuille protégée bloque aussi… vos propres macros : il faut ôter la protection, écrire, puis reprotéger, ou utiliser UserInterfaceOnly:=True.

InstructionEffet
ActiveSheet.Protect Password:="Form26"Protège la feuille avec un mot de passe
ActiveSheet.Unprotect Password:="Form26"Ôte la protection (mot de passe sensible à la casse, sinon erreur 1004)
ActiveSheet.UnprotectSans argument : Excel demande le mot de passe dans une boîte masquée
Protect Password:=…, UserInterfaceOnly:=TrueProtège pour l’utilisateur, laisse écrire les macros ; à reposer dans Workbook_Open
ActiveSheet.ProtectContentsRenvoie True si la feuille est protégée
ThisWorkbook.Protect Password:=…, Structure:=TrueInterdit d’ajouter, supprimer, renommer ou afficher des feuilles
Sheets("Paie").Visible = xlSheetVeryHiddenMasque une feuille : impossible à afficher depuis Excel, seulement par VBA
Simulateur : Protect, Unprotect et UserInterfaceOnly
Toujours reprotégerSi une erreur survient entre Unprotect et Protect, la feuille reste ouverte. Placez Protect après une étiquette atteinte même en cas d’erreur (On Error GoTo Fin).
Le vrai verrou d’un fichierPour empêcher d’ouvrir le classeur, utilisez Fichier › Informations › Protéger le classeur › Chiffrer avec mot de passe : le fichier est réellement chiffré, contrairement aux contrôles faits en VBA.
Exercice : sécuriser la mise à jour des tarifs

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » : Module1, Module2 et ThisWorkbook.
  2. Ouvrez Alt+F8 : seule la macro Lancer_MiseAJour doit apparaître. Expliquez pourquoi les autres sont masquées.
  3. Exécutez-la : testez un mauvais mot de passe, Annuler, puis Form26. Les tarifs augmentent de 5 % et la feuille reste protégée.
  4. Verrouillez le projet avec le mot de passe VBA2026, enregistrez, fermez, rouvrez et vérifiez que le code est masqué mais que la macro fonctionne.
  5. Répondez aux questions de la feuille Contrôle (cellules jaunes) et comparez avec la feuille Corrigé.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français