Mise en place d'un gestionnaire d'erreurs

cs_lupizzz Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 24 décembre 2007 - 24 déc. 2007 à 16:36
cs_lupizzz Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 24 décembre 2007 - 24 déc. 2007 à 19:45
Bonjour,

Je souhaite mettre une gestion d'erreur au niveau de mon projet.

Pour cela, j'ai un module (mdlError) qui contient toutes mes fonctions appellées pour gérer les erreurs. On y trouve notamment :
- une procédure permettant d'afficher une message box avec la description de l'erreur
- une procédure permettant l'envoi d'un email avec la description de l'erreur
- une procédure permettant de griser tous les contrôles de ma form (sauf bouton exit)
- une procédure Error appellant les trois fonctions ci-dessus. Cette procédure prend en paramètre la description de l'erreur, le nom de la procédure (avec le nom du module ou de la feuille) et en option la form.

Au niveau de chaque procédure et fonction de mon projet, j'ajoute l'étiquette ferror :
Call Error(Err.Description, Me.Name & ".xxxxxxxxxx", Me)  où xxxxxx correspondant au nom de ma procédure

1ère question : n'y a-t-il un moyen de remplacer le nom de la procédure écrit en dur dans chaque étiquette par une propriété ? Pour le nom de la form, j'utilise Me.Name mais je n'ai rien trouvé pour le nom de la procédure en cours.

2ème question : au niveau de ma procédure Error, je remet le pointeur de la souris à sa valeur par défaut (Form.MousePointer = vbDefault). Malheureusement, je n'arrive pas à le gérer lorsqu'une erreur se produit dans un module. Supposons qu'au niveau de ma form, j'appelle un module qui provoque une erreur. Le module appelle Error sans le paramètre form. Je ne voudrais pas être obligé de passé en paramètre la form dans l'appel de la fonction de mon module. Existe-t-il un moyen de connaître la form "active" ?

3ème question : Au niveau de mes form, la gestion d'erreur des sous-procédures n'est pas très pratique. Supposons qu'une première procédure P1 en appelle une seconde P2. Si une erreur se produit dans P2, on passe par l'étiquette ferror, on appelle la fonction Error qui grise l'écran. Après être passé dans la fonction Error, l'exécution repart à l'instruction suivante au niveau de ma procédure P1 alors que je ne le souhaite pas. Pour le gèrer, je mets à jour dans ma fonction Error une variable globale gError qui prend la valeur True. Au niveau de ma préocédure P1, après chaque appel d'une sous-procédure, j'ai ajouté la ligne de code :
If gError = True Then Exit Sub
La solution est un peu lourde. Y-a-t-il plus simple ?

J'attends vos avis ...

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 déc. 2007 à 17:38
salut,

que de bonnes questions ^^

1 = > et non pas de solution miracle, tu devras saisir le nom à la main

2 => oui tu peux. comme tu passes le nom Me.Name & ".xxxxxxxxxx" en 2e paramètre il te suffit de faire une petite fonction en récupérant la gauche jusqu'au ".", et for each frm in me.forms et de comparer les noms

3 => plus simple nom mais tu as une autre possibilité : ajouter un argument optionnel genre "bInternal". si c'est un appel interne la proc réagira différemment

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_lupizzz Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 24 décembre 2007
24 déc. 2007 à 19:18
Merci,

Pour le point 2, je ne peux malheureusement pas faire comme tu proposes car ma form peut appeler une procédure présente dans un module donc s'il y a une erreur dans le module, j'envoie à ma fonction Error le nom du module.
Mais ta réponse m'a mis sur une piste. En effet, il suffit de balayer les forms et regarder celle qui est "enabled" :
    For Each form In Forms
        If form.Enabled = True Then
            form.MousePointer = vbDefault
            'appel de la ma fonction qui grise la form
        End If
    NextPour le pointeur de la souris, je me suis aperçu qu'au lieu de faire Me.MousePointer vbHourglass dans mes forms, je pouvais faire Screen.MousePointer. Ainsi, dans ma fonction Error, Screen.MousePointer vbDefault fonctione.

Pour le point 3, je n'ai pas bien compris ta proposition. En fait, ce que cherche c'est une instruction qui stopperait l'action en cours. L'équivalent d'un End sans fermer l'application.
0
cs_lupizzz Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 24 décembre 2007
24 déc. 2007 à 19:22
Pour le point 3, je crois que je viens de trouver la solution. La commande Stop arrête l'exécution du code (sans fermer l'application).
 
0
cs_lupizzz Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 24 décembre 2007
24 déc. 2007 à 19:45
Je suis allé un peu vite. La commande Stop ne fonctionne pas.
0
Rejoignez-nous