Ce n'est pas nouveau, quoi que l'on fasse, il arrive régulièrement que l'on perde un mot de passe... Heureusement, voici une méthode relativement simple pour contourner la protection par mot de passe qui empêche l'accès au code des macros VBA d'une feuille Excel. Plus précisément, elle permet de redéfinir un nouveau mot de passe sans connaitre l'ancien.
Attention : les informations et le programme mis à disposition dans cet article ne doivent pas être utilisés pour accéder au code d'un fichier protégé dont vous n'êtes pas le propriétaire, auquel cas vous seriez hors la loi (contrefaçon, accès frauduleux...).
Etape 1 : Modifier manuellement le fichier
Avant tout, sachez que je vous propose en fin d'article un petit utilitaire pour simplifier cette étape . Si vous êtes suffisamment doué en informatique et que vous préférez le faire à la main, voici la procédure :
Pour commencer, il faut vous munir d'un éditeur hexadécimal pour pouvoir modifier le contenu du fichier Excel manuellement. Il en existe beaucoup, dont des gratuits qui feront très bien l'affaire, comme Frhed. Pensez également à sauvegarder votre fichier en cas de souci !
Ensuite, si votre fichier est au format Excel 2010 (extension .xlsm), vous devez changer cette extension en .zip (et oui, le format 2010 est avant tout une archive zip !), puis ouvrir l'archive et extraire le fichier xl/vbaProject.bin.
Ouvrez avec votre éditeur hexadécimal le fichier vbaProject.bin pour un classeur Excel 2010, ou directement le fichier Excel si vous utilisez l'ancien format (extension .xls). Recherchez la chaîne DPB= (généralement en fin de fichier) et remplacez la par DPX=. Enregistrez le fichier, puis fermez votre éditeur.

Modification du fichier Excel avec Frhed
Si votre fichier était au format 2010, ouvrez l'archive puis remplacez le fichier xl/vbaProject.bin par celui que vous venez de modifier. Enfin, rétablissez l'extension d'origine.
Etape 2 : Définir un nouveau mot de passe
Vous êtes ensuite obligé de définir un nouveau mot de passe, que vous pourrez retirer par la suite si vous le souhaitez. Ouvrez le fichier Excel modifié, puis accédez à l'éditeur VBA (Alt+F11). Un message d'avertissement s'affiche pour vous avertir qu'une "touche est incorrecte". Ignorez cet avertissement en cliquant sur Oui. Vous pouvez également obtenir une "erreur inattendue 40230", ignorez simplement en cliquant sur OK.

Excel vous avertit que le fichier contient une "touche incorrecte", une mauvaise traduction pour "invalid key"...
Avant toute autre action, cliquez sur le menu Outils > Propriétés de ..., et changez le mot de passe dans l'onglet Protection. Pour terminer, enregistrez le fichier, fermez puis ré-ouvrez, et retournez dans l'éditeur VBA. Vous pouvez désormais accéder au code source en tapant le nouveau mot de passe.
Bonus : Un petit programme pour vous simplifier la tâche !
Pour simplifier la réalisation de la première étape, je vous ai préparé un petit programme pour le faire à votre place. Téléchargez-le et décompressez l'archive, puis :
- Sous Windows, glisser-déplacer votre fichier Excel sur l'icône de l'application (VBAPwdRemover.exe). Une fenêtre noire apparait. Lorsque le message Appuyez sur une touche pour continuer... s'affiche, vous pouvez fermer cette fenêtre.
Glisser votre fichier Excel sur l'icône de l'application.
- Sous Linux, tapez la commande VBAPwdRemover.bin <chemin_du_fichier_Excel>
Le programme créé automatiquement une sauvegarde (nomfichier_bak.xls par exemple), mais si votre fichier est important je vous conseille d'en faire une manuellement avant de lancer la procédure : un bug peut toujours arriver...
Une fois le programme terminé, il ne vous reste plus qu'à redéfinir un mot de passe (reportez-vous à l'étape 2).
Liens de téléchargement :
Pour les plus curieux, je fournis également le code source C++ (licence GPL). A la compilation, vous avez la possibilité de désactiver le support du format Excel 2010 en définissant la constante NO_XLSM_SUPPORT (option de compilation -DNO_XLSM_SUPPORT). Si vous conservez le support de ce format, vous aurez besoin de la zlib et de la libzip (apt-get install libzip-dev sous Linux). Pour compiler sous Windows, j'ai utilisé MinGW et MSys.
Cela ne fonctionne pas, une fois l'extension remise à l'ouverture du fichier Excel xlsm 2010.
Message d'erreur et le fichier .bin est supprimé, et il y à génération d'un message d'erreur.
Merci pour votre commentaire !
Certains messages d'erreurs sont "normaux" (cf Étape 2). Quel est le contenu de votre message d'erreur ? Avez-vous essayé avec l'outil VBA Password Remover (cf fin d'article) ?
Bonjour,
Alors j'ai bien réussi à modifier DPB par DPX en revanche derrière quand je veux mettre le fichier BIN il me marque opération impossible.. Savez vous pourquoi ?
Merci
Bonjour, j'ai essayé cette méthode qui normalement fonctionne très bien mais j'ai eu le même problème que Adam, c'est à dire :
après toute manipulation on ouvre le fichier et dès l'ouverture le fichier ProjetVBA.bin est supprimé, du coup on a accès a l'interface VBA mais sans le code. Il a disparu.
As tu une solution à ce problème ? à savoir si on peut récupérer le code, dans quel fichier il est stocké ?
Je te remercie
Désolé, je ne parviens pas à reproduire votre problème. Je viens d'essayer sur un fichier de test au format 2010, cela a fonctionné sans souci.
Comme écrit dans l'article, il faut faire attention à quelques points :
- Pour récupérer le fichier vbaProject.bin, il NE faut PAS décompresser toute l'archive, mais naviguer à l'intérieur pour faire un copier/coller de ce fichier seulement. De même lorsque l'on patch avec la version modifié, mais dans l'autre sens.
- Attention à l'extension du fichier : si c'est un fichier fait sous Excel 2010, l'extension est xlsm. Mais d'après le message d'Adam, ce n'est pas ça le problème.
- Lorsque l'on ouvre le fichier après l'avoir patché, il peut y avoir pas mal de messages d'erreurs ou d'avertissements, certains se répétant plusieurs fois de suite (notamment "Erreur inattendu"). Il faut répondre favorablement à tous ces messages (Oui ou OK) jusqu'à pouvoir atteindre le panneau Propriétés de l'éditeur VBA.
Pour simplifier le processus et éviter les erreurs de manipulation, n'oubliez pas que je mets à votre disposition un outil très simple d'utilisation en fin d'article
PS : désolé pour le petit retard de modération de ton commentaire
.
Bonjour,
Je ne suis pas pro en terme de modification de fichier. L'explication me semble claire mais à la réalisation, ça ne semble pas marcher.
Peux-tu me préciser un point. Lorsque tu parles du VBAProject.bin, tu dis qu'il ne faut pas décompresser toute l'archive.
Voici ce que je fais. Je change l'extension .xlsm en .zip. J'ouvre l'archive via 7zip. je cherche dans xl les fichiers sheet1, workbook.eml et VBAProject.bin. Est-ce que cette action décompresse les fichiers ? et tous les fichiers ? Si oui, comment faire l'action que tu préconises ?
Après j'ai bien trouvé le sheetprotection ainsi que le DPB a transformer en DPX. je quitte les fichiers modifié et je les enregistre.
Je quitte tout. Et je remodifie l'extension du fichier en .xlsm.
Comme l'indiques Chapo (?) à l'ouverture du fichier, la page VBA ne montre aucun code. Or je suis certaine d'avoir des codes dans mon fichier d'origine.
J'ai également essayé la procédure avec VBAPwdRemover.exe. Mais le programme ne s'installe pas correctement.
Quand je dis que je ne suis pas une pro !!!
Merci de tes commentaires.
Bonjour,
Pour ma part je n'utilise pas 7zip pour les fichiers zip, mais plutôt directement l'explorateur de fichiers de Windows. Je ne peux donc pas trop te dire comment faire précisément avec 7zip. Sinon tu peux faire un clic droit > Ouvrir avec sur l'archive et sélectionner "Explorateur Windows".
L'outil reste toutefois plus simple à utiliser. Il n'y a pas d'installation, il suffit de glisser-déposer le fichier Excel sur l'exécutable, comme montré sur la petite capture.
Bonjour,
J'ai le même problème que Adam et Chapo, à savoir, l'erreur d'avertissement s'affiche je choisi OK et là un tableau s'affiche disant que le fichier Projectvba.bin est supprimé. Du coup, cela supprime tout le code...
Cela peut être à cause d'une grande sécurité du fichier?
Merci d'avance pour votre réponse.
Bonjour,
Même question, même réponse : je ne parviens pas à reproduire ce problème, je ne peux donc pas voir ce qu'il ne va pas, désolé. Essayez avec l'outil peut-être.
Lorsque je glisse-déplace mon fichier Excel sur l’icône de l’application (VBAPwdRemover.exe), voici le message d'erreur:
Error : This Excel 2010 file format does not support macro. Please specify a xls
m file instead.
Appuyez sur une touche pour continuer...
Je ferme la fenêtre comme indiqué mais rien ne se passe. Il ne se crée pas de fichier Excel modifié (où dois-je le chercher s'il en crée un?). Je tente d'ouvrir mon fichier Excel, mais il me demande toujours le mot de passe?
Ce message d'erreur indique que vous utilisez un fichier Excel 2010 ayant comme extension .xlsx. Or, cette extension implique que le fichier ne comporte pas de macro VBA, puisque, dans le cas contraire, il devrait porter l'extension .xlsm.
Comme il n'y a pas de macro VBA, il n'y a pas non plus de mot de passe protégeant ces macros, et donc cet article et cet outil ne vous sont d'aucune aide (le titre de l'article mentionne bien "mot de passe VBA "). L'application ne fait rien, aucun fichier n'est créé ou modifié, et cela est bien normal
N'auriez vous pas confondu avec le mot de passe qui protège la feuille ou le classeur Excel ?
c'est parfait, je crois que plus simple c'est impossible ! Merci
Sur excel 2003, donne error 40230 au lieu de touche incorrecte, continuer la manip: ca marche !
Hello,
Sur excel 2003, j'ai l'erreur 40230 mais ça ne marche pas. Que veux-tu dire dans "continuer la manip" ?
Merci