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 inexplicables. 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. C’est pour cette raison que le fichier est copié avant d’être traité.

Voici donc un batch (.cmd) qui peut être utilisé directement par 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 

copy %1 %1.sav 
SET NoExecuteApplication = "Oui" 
"C:\Program files\Microsoft Office\OFFICE14\MSACCESS.EXE" %1 /Decompile 
"C:\Program files\Microsoft Office\OFFICE14\MSACCESS.EXE" %1 /Compact 
SET NoExecuteApplication=

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.

Notez que suivant la version d’Access vous devrez remplacer le chemin MSACCESS.EXE par le votre.

NoExecuteApplication permet à votre application de ne pas s’exécuter lors de ce traitement. Il faut dans l’application prévoir ce cas en utilisant ce code dans votre procédure de démarrage de l’application :

'debogage, decompil, compactage 
If Not Environ("NoExecuteApplication") = "" Then 
   'autres traitements possibles en post livraison 
   Application.Quit 
   'quitte 
End If

Bonne utilisation !

ACCESS : Contrôle OLE lié et application manquante

Dans les applications MS Access, il peut arriver d’avoir des contrôles OLE liés à des applications qui ne sont pas ou plus installées. Dans ce cas, toutes les tentatives d’interventions se soldent par le message :

Impossible de modifier cette propriété : elle est en lecture seule.

ou encore.

Le serveur OLE n'est pas inscrit. Pour l'inscrire, réinstallez-le.

Une seule méthode pour s’en débarrasser :

Clic-droit sur l’objet, Remplacer par…, Image

Un joli message s’affiche :

Vous ne pouvez pas annuler cette opération et ne pourrez plus modifier cet objet.

Cliquez sur Oui.

Votre objet est à nouveau accessible mais bien entendu, pas avec l’application originelle puisque celle-ci n’est pas installée.

Bonne utilisation !

VBA : Rechercher un mot dans toutes les requêtes

Les modifications d’une application conséquente sont souvent difficiles à réaliser, surtout dans le cas des requêtes. Dans ce billet je vous propose un bout de code pour rechercher un mot, complet ou non, dans toutes les requêtes d’un fichier MS Access.

Function SnifQuery(Optional strText As String = "") 
   On Error GoTo errSub 
   Dim db As DAO.Database 
   Dim qry As DAO.QueryDef 

   Set db = CodeDb 

   ' si rien n'est transmis on demande le mot 
   If strText = "" Then 
      strText = InputBox("Indiquez le mot à rechercher dans les requêtes." & _ 
           vbCrLf & "Ce mot peut être incomplet.", "Mot à rechercher", "") 
      If strText = "" Then Exit Function 
   End If 

   ' balaye toutes les requêtes 
   For Each qry In db.QueryDefs 
      'si on trouve le mot 
      If qry.sql Like "*" & strText & "*" Then 
         ' on ouvre la requête 
         DoCmd.OpenQuery qry.Name, acViewDesign 
      End If 
   Next 

   ' on est propre donc on ferme le chose dont on ne se sert plus. 
   Set qry = Nothing 
   Set db = Nothing 
   Exit Function 
   
   errSub: 
   Resume Next
 
End Function

Pour le lancement vous pouvez passer par la fenêtre Exécution de VBE ou encore créer une macro Autokeys.

  • Ouvrez une nouvelle macro.
  • Affichez la colonne Nom de macro.
  • Entrez le raccourci souhaité. Exemple +^{Q}
  • Dans la colonne Action sélectionnez ExécuterCode.
  • Indiquez dans le nom de la fonction SnifQuery().

Lorsque vous utiliserez Ctrl+Shift+Q la fonction sera appelée.

Attention ce bout de code ne fait pas de recherche dans les requêtes des bibliothèques.

Bonne utilisation !

Argentek une application de gestion de comptes gratuite pour PC

Suite à l’annonce de Microsoft de l’arrêt de la commercialisation et du support de Money, j’ai réalisé avec Microsoft Access l’application de gestion de comptes bancaires Argentek.

Cette application est libre d’utilisation mais ne peut être vendue ou faire l’objet d’une offre commerciale quelconque.

Suite à des abus de certains utilisateurs qui se sont appropriés le code sans mon autorisation, le code a été verrouillé.

Quelques fonctionnalités :

  • Multi compte
  • Solde en temps réel et par opération
  • Opérations automatisées avec déclenchement à date, par mois, trimestre, semestre, annuel
  • Opération de transfert entre compte
  • Gestion des tiers et catégorie
  • Création de compte illimitée
  • Création d’opération illimitée
  • Sauvegarde automatisée
  • Pointage des opérations
  • Protection des opérations pointées

Bonne utilisation !