Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Accueil Access Forum Access F.A.Q Access F.A.Q VBA Tutoriels Sources Outils Livres Access TV Access 2007

Créer des rapports d'erreurs sous Access

Date de publication : 20/12/2005

Par Christophe WARIN
 

Ce tutoriel constitue un exemple simple et puissant destiné à faciliter le débogage et la maintenance sur site d'applications Access.


Prés requis
Introduction
1. Création de la classe GestionnaireErreur
1.A. Manipuler un fichier texte
1.B. Ouverture du fichier texte
1.C. Ecriture dans le fichier texte
1.D. Fermeture du fichier
2. Utilisation de l'objet GestionnaireErreur dans votre application
2.A. Instanciation d'un nouvel objet au démarrage
2.B. Utilisation dans les procédures du projet
Conclusion
Liens utiles


Prés requis

Ce tutoriel nécessite la connaissance des bases du langage Visual Basic et notamment la gestion des erreurs : fr Tutoriel sur la gestion des erreurs


Introduction

Lors des premiers jours d'utilisation de vos applications Access suivant leur déploiement, vous devez parfois exécuter certaines tâches de maintenance. Vous devez alors faire confiance à l'utilisateur en ce qui concerne les différents messages d'erreur qu'il a pu rencontrer.

Malheureusement, ses dires ne reflètent pas toujours la réalité. Aussi une solution simple consiste à enregistrer ces messages d'erreur dans un fichier texte qui portera le même nom que l'application suivi de l'extension .log (Fichier de log d'erreur).

Toutefois, il serait fastidieux d'avoir à écrire des lignes de code relatives aux manipulations de ce fichier texte dans chaque procédure de votre projet. La meilleure approche consiste donc à créer une classe d'objet qui se chargera d'ouvrir le fichier texte, d'écrire les informations à l'intérieur, ainsi que de le fermer.


1. Création de la classe GestionnaireErreur

Il s'agit là d'une classe toute simple dotée d'un seul attribut et de trois méthodes publiques.

Attribut privé

  • oFichierLog
Méthodes publiques

  • Instancier
  • EnregistrerErreur
  • Fermer

1.A. Manipuler un fichier texte

Il existe plusieurs techniques pour manipuler les fichiers texte. Il est ainsi possible d'utiliser des fonctions VBA (Open, Print), des fonctions de l'API Windows ou bien encore les objets TextStream de la référence Microsoft Scritping Runtime.

Celle retenue ici sera l'utilisation des TextStream. La raison est assez simple. Les opérations effectuées sur les fichiers texte avec les fonctions Open et Print de VBA ne sont pas instantanées. Les modifications sont apportées en mémoire mais ne sont écrites qu'à la fermeture du fichier texte. Autrement dit, cela vous obligerait à fermer et ouvrir le fichier texte à chaque inscription d'une erreur. Quant aux fonctions de l'API Windows, leur programmation est beaucoup trop compliquée pour le résultat escompté. Il est de loin préférable de tirer partie des possibilités offertes pas les objets TextStream.

Il vous faut donc ajouter la référence Microsoft Scripting Runtime à votre projet.

Insérez ensuite un nouveau module de classe à votre projet VBA et sauvegardez le sous le nom de GestionnaireErreur.


1.B. Ouverture du fichier texte

L'ouverture du fichier texte se fait lors de l'appel de la méthode Instancier de l'objet GestionnaireErreur. Cette méthode reçoit donc le nom du fichier comme paramètre. Une fois le fichier ouvert, l'objet TextStream résultant est affecté à la variable privée oFichierLog à l'aide de la méthode OpenTextFile de l'objet FileSystemObject.
Public Sub Instancier(strnomfichier As String)
On Error GoTo GestionErreur
  'Instancie un objet FileSystemObject
  Dim oFso As New FileSystemObject
  'Ouvre le fichier texte en mode ajout
  Set oFichierLog = oFso.OpenTextFile(strnomfichier, ForAppending, True)
  GoTo Fin
GestionErreur:
  MsgBox "Impossible d'instancier le gestionnaire d'erreurs", vbCritical
Fin:
End Sub

1.C. Ecriture dans le fichier texte

Une fois l'objet TextStream instancié, il est possible d'appeler sa méthode WriteLine afin d'écrire une nouvelle ligne dans le fichier texte.

Cette opération est exécutée par la procédure EnregistrerErreur. Elle reçoit comme paramètre le numéro de l'erreur à enregistrer, sa description ainsi que le nom de la procédure qui l'a déclenchée.
Public Sub EnregistrerErreur(intErrNumber As Integer, _
  strErrMessage As String, Optional strNomProc = "")
On Error GoTo GestionErreur
  If Not oFichierLog Is Nothing Then
    oFichierLog.WriteLine "[" & Now & "] Procédure : " & _
     strNomProc & " -> " & intErrNumber & ":" & strErrMessage
  Else
    MsgBox "Le gestionnaire d'erreur n'est pas instancié", vbCritical
  End If
  GoTo Fin
GestionErreur:
  MsgBox "Impossible d'écrire dans le fichier du gestionnaire d'erreur.", vbCritical
Fin:
End Sub

1.D. Fermeture du fichier

La fermeture du fichier texte est une étape à ne pas oublier pour éviter les conflits en écriture sur celui-ci. Il est primordial que le fichier soit déverrouillé à la fermeture de votre application.

Pour cela deux méthodes ont été envisagées. Une fermeture explicite et une autre implicite.

La fermeture explicite se fera à l'aide de la méthode Fermer de l'objet GestionnaireErreur. Celle implicite se fera à la destruction de l'objet via la méthode Class_Terminate prédéfinie en VBA et automatiquement invoquée par le programme lors de la destruction de l'objet. Cette méthode implicite est impérative pour traiter le cas d'un arrêt critique de votre application.

Pour ne pas écrire deux fois le même code, la méthode Fermer consistera en un simple appel de la méthode Class_Terminate.
Public Sub Fermer()
Class_Terminate
End Sub


Private Sub Class_Terminate()
On Error GoTo GestionErreur
  oFichierLog.Close
  Set oFichierLog=Nothing
GestionErreur:
End Sub

2. Utilisation de l'objet GestionnaireErreur dans votre application


2.A. Instanciation d'un nouvel objet au démarrage

L'instanciation de l'objet se fera via une macro dont la seule action sera d'éxecuter du code placé dans un module.

Ajoutez un nouveau module à votre projet (un module simple, pas un module de classe), et placez-y le code suivant :
Public oGestErreur As GestionnaireErreur

Public Function Macro_Autoexec() 
Dim strLogFileName As String 
    'Récupère le nom du fichier de base de données et lui ajoute l'extension .log
    strLogFileName = Left(CurrentDb.Name, Len(CurrentDb.Name) - 4) & ".log" 
    Set oGestErreur = New GestionnaireErreur 
    oGestErreur.Instancier strLogFileName 
End Function
Cette fonction instancie un nouvel objet GestionnaireErreur nommé oGestErreur. Cet objet est public, il sera donc disponible depuis n'importe quelle procédure de votre projet.

Pour que ce code soit exécuté automatiquement au démarrage de votre application, créez une macro nommée AutoExec (le simple fait de lui donner ce nom fera que son lancement sera automatique dès l' ouverture de l'application.

  • Action : ExécuterCode
  • Nom Fonction : Macro_Autoexec()

2.B. Utilisation dans les procédures du projet

L'utilisation est très simple. Là où vous avez mis en place une gestion d'erreurs via On Error, il suffit de faire un appel à la méthode EnregistrerErreur de l'objet oGestErreur.

Avant :
Sub test()
On Error GoTo GestionErreur
Dim i As Integer
i = 10 / 0
GoTo Fin
GestionErreur:
  Select Case err.Number
    Case 11: MsgBox "Division par zéro", vbCritical
    Case Else: MsgBox "Erreur inconnue", vbCritical
  End Select
Fin:
End Sub
Après :
Sub test()
On Error GoTo GestionErreur
Dim i As Integer
i = 10 / 0
GoTo Fin
GestionErreur:
  Select Case err.Number
    Case 11: MsgBox "Division par zéro", vbCritical
    Case Else: MsgBox "Erreur inconnue", vbCritical
  End Select
  'Enregistre l'erreur dans le fichier de log
  oGestErreur.EnregistrerErreur err.Number, err.Description, "Test()"
Fin:
End Sub
Le fichier d'erreur ressemblera alors à :
[11/12/2005 14:57:00] Procédure : Test()-> 11:Division par zéro

Conclusion

Cette méthode de gestion d'erreurs est quelque peu simpliste mais constitue une bonne base pour les développeurs effectuant leurs premiers pas sur Microsoft Access. Une historisation beaucoup plus complète peut en être dérivée en incluant par exemple les valeurs de certaines variables critiques de votre projet. C'est à vous de personnaliser cette approche afin de réaliser un traitement qui saura correspondre à vos besoins.

Je tiens à remercier Jean-Philippe Ambrosino et Olivier Lance pour leur relecture et leurs corrections.


Liens utiles






Valid XHTML 1.1!Valid CSS!

Copyright © 2005 WARIN Christophe. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique Access : Christophe Lessirard - Contacter par EMail :
Vos questions techniques : forum d'entraide Access - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.