Comment protéger ses macros VBA (limiter la consultation du code et le lancement) sur Excel ?
Pour ce nouveau chapitre de la formation dédiée à la découverte du langage VBA, nous allons découvrir comment protéger efficacement les lignes de codes de nos macros. Nous verrons ainsi comment ajouter une protection aux macros et quelles conséquences cela va avoir sur l’exécution des commandes depuis le classeur Excel. Et enfin pour finir, nous verrons comment protéger également le lancement de macros en mettant en place un système de mot de passe.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Comment protéger l’accès au code VBA
Visual Basic Editor permet de protéger très facilement l’accès et la modification du code VBA.
Les raisons pour lesquelles nous pourrions avoir besoin d’une telle protection sont nombreuses :
- Empêcher un utilisateur de modifier la macro (que ce soit intentionnellement ou non),
- Empêcher qu’un code ayant demandé de nombreuses heures de développement ne soit copié,
- Protéger l’accès à certaines fonctionnalités sensibles …
Pour cela, depuis l’éditeur de code, nous effectuons un clic droit sur le projet à protéger, puis nous choisissons le menu Propriétés de VBAProject… :
Dans la fenêtre qui s’affiche, nous nous rendons dans l’onglet Protection, puis nous commençons par cocher l’option Verrouiller le projet pour l’affichage et ensuite nous saisissons deux fois le mot de passe (ici « test ») :
Attention de bien retenir ce mot de passe, car il ne sera plus possible d’accéder au code du projet VBA sans celui-ci… (enfin théoriquement, nous y reviendrons un peu plus tard)
Cela étant fait, nous pouvons enregistrer le fichier pour que les modifications du projet soient maintenues, puis fermer et rouvrir à nouveau le fichier Excel.
Lorsque nous ouvrons à nouveau le classeur, et que nous nous rendons dans VBE, le projet VBA est maintenant réduit :
À ce moment-là, les macros ne sont pas visibles depuis le projet, mais elles sont évidemment accessibles normalement.
Nous pouvons en effet revenir dans la feuille de calcul et appuyer sur les touches [Alt]+[F8] pour lancer la fenêtre de lancement des macros :
De retour dans VBA, si nous essayons de le déployer pour le consulter ou le modifier, le mot de passe nous sera alors demandé :
Il ne sera alors pas possible de le modifier tant que le mot de passe n’aura pas été renseigné… du moins théoriquement !
Gardez en effet toujours à l’esprit qu’aucune protection n’est réellement infaillible, et que si celle-ci vous permet de conserver vos secrets auprès de la plupart des regards indiscrets, une personne vraiment déterminée à faire sauter la protection pourra arriver à ses fins si elle s’en donne les moyens…
Une fois le mot de passe renseigné, nous pourrons bien sûr retrouver l’arborescence du projet :
Et nous pourrons modifier le code !
L’accès au code déprotégé est possible jusqu’à ce que le fichier soit fermé.
Ensuite, lors de la prochaine ouverture il sera à nouveau nécessaire de venir saisir le mot de passe.
2. Conséquences sur le fonctionnement du classeur
Un point à savoir lorsque nous protégeons l’accès au code VBA, c’est que dans l’hypothèse où celui-ci viendrait à provoquer une erreur, il ne sera évidemment pas possible d’accéder directement à l’emplacement de celle-ci.
Le bouton Débogage n’est en effet pas disponible :
Excel nous informe de l’origine de l’erreur, avec une description correspondante, mais c’est tout !
À ce moment-là, l’inconvénient auquel nous pourrions être confrontés, c’est qu’il ne sera pas possible de dépanner un utilisateur à distance sans lui transmettre au préalable le mot de passe.
En revanche, dès que le mot de passe est saisi et donc que le projet est débloqué, le bouton Débogage est à nouveau opérationnel :
3. Empêcher l’exécution de code par mot de passe
Un dernier point, sachez qu’il peut aussi être utile d’empêcher qu’une macro ne soit exécutée sans qu’un mot de passe ne soit saisi.
Pour cela, il suffit simplement d’ajouter l’instruction suivante en début de procédure :
If InputBox("Veuillez saisir le mot de passe pour exécuter la macro :", "Mot de passe") <> "test" Then
MsgBox "Mot de passe incorrect, la macro va se fermer !"
Exit Sub
End If
Le fonctionnement de ce bout de code est très simple :
- Excel affiche une zone de texte à l’utilisateur (avec l’instruction Inputbox), afin que celui-ci puisse saisir un mot de passe,
- Lorsque le résultat saisi par l’utilisateur est différent du résultat attendu (ce qui sera le cas si l’utilisateur tape un mot de passe faux, s’il ne tape aucun texte ou encore s’il clique sur le bouton Annuler), alors un nouveau message l’informe de son erreur, et la macro est interrompue
- En revanche, si le mot de passe est correct, l’exécution de la macro peut continuer
Bien entendu, étant donné que le mot de passe est clairement lisible dans le code, cette technique ne sera efficace que lorsque le code VBA sera protégé en utilisant la méthode vue juste avant.