Astuce VBA : protéger le code VBA par mot de passe

Vous avez la possibilité de protéger l'accès à votre projet VBA par un mot de passe.

Sans ce mot de passe il ne sera alors pas possible* d'accéder au code VBA, aux UserForms, etc.

* vous découvrirez en bas de page si cette protection est réellement efficace


Ajouter un mot de passe VBA

Pour ajouter un mot de passe, faites un clic droit sur le projet VBA du classeur concerné à partir de l'éditeur et sélectionnez "Propriétés de VBAProject" :

excel vba mot passe de

Cliquez sur l'onglet "Protection", cochez la case, entrez le mot de passe et validez :

excel vba ajouter mot passe de

Pour vérifier si cela a bien fonctionné, entrez au moins une ligne de code VBA, enregistrez le classeur au format xlsm et fermez le classeur.

A la prochaine ouverture, le mot de passe sera exigé pour accéder au projet VBA :

excel vba mot passe demande acces de

Efficacité de la protection

Cette protection est suffisante pour empêcher un utilisateur lambda d’accéder au projet VBA.

Mais sachez qu'il existe des techniques permettant à un utilisateur averti d'accéder au code VBA malgré le mot de passe.

Soyez donc conscient que votre code VBA n'est pas complètement protégé, mais que pour bon nombre d'utilisations (comme par exemple pour empêcher vos collègues de bidouiller le code de votre application), cette protection se révèlera bien suffisante.

Comment protéger le code plus efficacement ?

Si votre code VBA est une pépite et qu'il mérite d'être protégé plus efficacement, vous pouvez obfusquer votre code (en plus du mot de passe VBA).

L'obfuscation consiste à rendre le code VBA illisible (tout en restant fonctionnel).

Voici un exemple de code VBA obfusqué :

Function b8df51c05627c2c7a6ccb9687a61aa3db(ByVal m02bfea39d5c03072df2b9ac69a63d02c)
If bfec0e4a3d4ed8a6e788ae883bb07b4aa = 1 Then b31f894d874702cfe0f293382dc730879
b8df51c05627c2c7a6ccb9687a61aa3db = ""
bd2616cf6752c53420877818657e28354 = UBound(b3fe457c44d7d5c35ee73713e6c24a249)
For n8f48522fdf95bb09a3b85aec5bdc8664 = 0 To bd2616cf6752c53420877818657e28354
If b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 0) = m02bfea39d5c03072df2b9ac69a63d02c Then
If b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 1) = "" Or b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 2) = "" Then
b8df51c05627c2c7a6ccb9687a61aa3db = b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 1) & b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 2)
Else
b8df51c05627c2c7a6ccb9687a61aa3db = b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 1) & " - " & b3fe457c44d7d5c35ee73713e6c24a249(n8f48522fdf95bb09a3b85aec5bdc8664, 2)
End If
Exit For
End If
Next
End Function

Pour plus d'informations sur ce procédé ou pour utiliser l'utilitaire d'obfuscation mis à disposition par Excel-Pratique, cliquez ici : obfusquer un code VBA