MS ACCESS : Réparer un fichier accdb ou mdb.

Avec Microsoft Access, il peut arriver d’avoir du code VBA lié aux formulaires ou aux états qui ne soit plus accessible ou qui provoque des erreurs inexpliquables. C’est rageant ! Surtout que les moyens de réparation sont rares.
Je vous livre ici une méthode qui, pour moi, a fait ses preuves dans de nombreux cas. Cela consiste à traiter le fichier avec deux commandes.
Attention vous devez traiter uniquement une copie de la base endommagée.

Voici donc un batch (.bat) qui peut être utilisé directement dans Windows.

rem @echo off
echo --------------- GUIDE D'UTILISATION --------------------------------
echo Copiez ce fichier dans le répertoire racine à traiter.
echo Decompile et compacte le fichier.
echo Enfoncé la touche Shift pour la première passe.
echo --------------------------------------------------------------------
echo AUTEUR : FABRICE CONSTANS MVP
"C:\Program files\Microsoft Office\OFFICE12\MSACCESS.EXE" %1 /Decompile
"C:\Program files\Microsoft Office\OFFICE12\MSACCESS.EXE" %1 /Compact

Faites-glisser la copie de votre application sur le batch en maintenant le shift appuyé pour éviter l’exécution du code.
Lorsque la barre de progression d’Access est terminée fermez l’application pour démarrer le compactage.
Vous décompilez (reconstruction des liens VBA) et compactez la base. Vous pouvez l’utilisé à partir de la version 97.

À propos de Loufab

Ma carrière dans l'informatique a débuté en 1988. J'ai travaillé dans l'industrie aéronautique et spatiale. A la recherche de nouvelles expériences, j'ai intégré l'équipe de Developpez.com en 2005. En 2008, après 2 années en tant que rédacteur/modérateur, j'ai obtenu ma nomination MVP ACCESS (Most Valuable Personnality) de Microsoft. Je me passionne pour les voitures de collections et plus particulièrement pour les américaines des 70's. Je posséde une Transam 79 et je me déplace habituellement en Jeep Wrangler YJ.
Cette entrée a été publiée dans Astuces ACCESS, Ms ACCESS, avec comme mot(s)-clef(s) , . Vous pouvez la mettre en favoris avec ce permalien.

16 réponses à MS ACCESS : Réparer un fichier accdb ou mdb.

  1. Claude Larocque dit :

    Bonjour,
    J’ai fait exactement ce qui est décrit pour décompiler et compacter, mais il semble que rien ne s’est passé, juste un flash de l’écran DOS et plus rien, de plus, ma base de données n’a pas diminuée d’un octet.
    Est-ce que cela veux dire que ma base de données n’a aucune section de code qui doit être enlevée, peut-être, mais avec plus de 200mb, cela serait surprenant.
    Quoiqu’il soit, j’utilise souvent le décompacter et réparer d’access, alors peut-être est-ce suffisant, qu’en penses-tu?
    Merci
    Claude du Québec

  2. Claude Larocque dit :

    Bonjour,
    Je ne sais pas au juste ce que le fait d’essayer votre .bat file à fait à ma base de données, mais depuis que j’ai suivi vos indications, lorsque j’ouvre ma base de données et essaye de faire des opérations, elle se ferme automatiquement, un message microsoft access a cessé de fonctionner et bla.bla.bla
    C’est la première fois en 2 ans d’utilisation de cette base de données que cela arrive donc il doit y avoir un lien avec votre code.
    Est-ce qu’il y a quelque chose à faire pour ça?

  3. Loufab dit :

    Bonjour Claude.
    Ces 2 lignes de commandes peuvent réparer une base endommagée au niveau du code. Cette procédure doit être passée uniquement sur une copie (comme stipulé en gras dans l’article) justement à cause de certaines erreurs qui ne peuvent rendre après la passage la base inutilisable. Dans ce cas il faut reprendre la sauvegarde et tenter la réparation par un autre moyen.
    Normalement la base ne réduit pas après une décompilation mais seulement après un compactage.
    Cordialement,

  4. Frédéric Battestini dit :

    Un seul mot : MERCI !
    j’ai perdu plus d’une heure à chercher à me dépanner pour ce problème d’ouverture de l’éditeur VBA, avant de chercher sur le net et de trouver votre solution sur Dev.com.
    Ça a marché immédiatement : encore merci.

  5. ypicot dit :

    Franchement utile !
    Je ne connaissais pas le /decompile.

    Encore une victoire de Loufab….

    Merci à toi.

    Yvan

  6. Tonio dit :

    decompile + vba + loufab => cette page en 1er result dans google
    Ha ha, ca y est j’ai la preuve de mes yeux que ton truc marche !!
    Je viens de le tester sur une appli qui ne compilait plus, qui sautait au moindre recordset…
    Avant de découvrir ce magnifique decompile, je recréais un projet vierge et je ré-importait tous les éléments un à un (forms, reports, modules, references, etc…)
    Et la en deux minutes, c’est plié !
    Big Up à toi !!
    Passe le bonjour à la eFactu Dream Team
    ;)

  7. Artzzz dit :

    Un mot : merci ! N’hésitez plus, je suis novice en info et j’ai réussi du 1er coup !

  8. claire dit :

    Merci beaucoup. J’avais un message d’erreur incompréhensible et plus de soucis

  9. Salwa dit :

    Bonjour à tous!
    De mon côté ça ne veut pas fonctionner… mais le pb est un peu différent peut-être!
    Je fais exécuter du code sous Access, et « le clic bouton » fonctionne sous Access, le pb est qu’un certain nb de personnes utilisent ma base sous Runtime, et là ça m’affiche « l’objet ou la classe ne gère pas le jeu d’événements » lorsque je fais le clic bouton. Je précise que je suis sous Runtime 2000 (Access aussi en version 2000…)
    Qqun aurait-il une brillantissime idée pour me sauver la vie? :-)
    Merci!!!
    S

    • Loufab dit :

      Bonjour,

      la décompilation ne résout pas tous les problèmes de compilations. Il manque probablement une référence sur les postes runtime.
      1) vérifier les références utilisée
      2) mettre du code au démarrage pour faire l’inventaire de celles présentes (boucle for ou while avec l’objet References.)
      3) poster le code que j’y vois plus clair.

      Cordialement,

  10. Oken2 dit :

    Salut Loufab
    J’espere que vous allez bien, vous etes mon dernier espoir car j’ai un gros gros pb avec ma base de données Access 2007.
    Voila deux jours suite a une fermeture brutale de mon pc alors que ma base se fermait, cette derniere m’affiche, à l’ouverture, ce message
    « le moteur de base de données Microsoft Office Access n’a pu trouver l’objet « MSysDb ». Assurez vous que l’objet existe et que vous avez correctement saisie son nom et son chemin d’acces ». et paf…Elle ne s’ouvre plus!

    Je vous pris de m’aider, cette base represente trois mon de developpement!!!
    Pardon Mr Loufab!

    • Loufab dit :

      Bonjour,
      Je tenterais l’import des objets depuis une nouvelle application vide.
      Dans tous les cas la sauvegarde est encore et toujours le meilleur moyen de se prémunir des erreurs.
      Cordialement,

  11. Xbad dit :

    Bonjour,

    J’ai un petit souci avec une appli Access que j’ai développé. Elle marche sur mon poste et sur celui de 3 autres collègues mais pas sur d’autres postes: l’appli s’ouvre bien mais dès qu’on essaye d’ouvrir un formulaire soit le sous formulaire qui y est ne s’affiche pas, soit l’appli s’arrête et se ferme. Pour ouvrir l’appli, je passe par un fichier .bat qui execute le fichier .mdb de mon appli….
    J’ai fouillé un peu sur les postes où ça bug et je constate qu’ils n’ont pas MS Access 2003 (présent sur les postes où ça marche) mais juste le runtime 2003. Du coup, j’appelle plutot dans le fichier .bat, le fichier .mde en mode runtime. Mais les mêmes erreurs apparaissent.
    J’ai essayé de comp/decomp avec votre fichier .bat mais le pb ne semble pas être resolu…
    Avez vous une idée à me suggérer. J’avoue que je ne suis pas une experte en VBA, j’apprends encore
    Je vous remercie d’avance :)

  12. Loufab dit :

    Bonjour,
    Le decomp/comp ne s’applique pas à ce genre de problème.
    La première chose à faire est de compiler votre projet ( vbe/débogage/compiler) et de corriger toutes les erreurs.
    Il faut également mettre à jour le runtime avec le dernier SP.

    Le problème persiste ;
    S’il s’agit toujours du même formulaire il est possible que vous utilisiez une instruction/méthode de manière détournée (pas prévue pour ce type d’utilisation) ça arrive assez souvent.
    Pour vérifier ça, commencez par faire une version de test en supprimant les sources du formulaire/sous-form concerné et refaire le test, ainsi de suite en déshabillant totalement le formulaire/sous-form jusqu’à trouver le problème.
    Dans l’attente de vous relire.
    PS : Free mon hébergeur n’envoie plus de notification de post, c’est pour cela qu’il y a un retard dans les réponses.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>