OVH Cloud OVH Cloud

Gestion erreur - Équivalent de la Propriété Err.line de asp?

5 réponses
Avatar
Yannick Croteau
Bonjour tout le monde!!

Je suis entrain de monté un petit module pour envoyé un e-mail lorsqu'il y a
un erreur de code VBA qui se produit sur un poste client Access. Si vous
voulez le code source vous me ferez signe, ça va me faire plaisir de vous le
donner, malgré que je ne pense pas que ça soit un mystère pour personne. Le
petit module fonctionne très bien, sauf que j'ai un problème au niveau de la
présision de l'erreur...

Sous asp il est possible de générer les erreurs servers avec une
propropriété Err.line qui renvoie le numéro de la ligne où l'erreur s'ait
produite et j'aimerais avoir l'équivalent en VBA Access. J'ai pu remarqué à
faisant un peu le tour de l'aide VBA qu'il existe des propritété semblable
pour les modules et le modules de Classe, cependant rien dans le cas d'une
fonction introduite dans un formulaire où encore un Sub d'évènement. À moins
que je mettes toutes les subs et fonctions en module, mais vous devinez que
j'aimerais grandement éviter ces longues modifications.....

Est-ce que quelqu'un aurait un idée?

Merci à l'avance!
Yannick
www.frogtuning.com
Access, ASP et SQL Server.

5 réponses

Avatar
Raymond
Bonsoir.

Tu n'auras pas le n° de ligne, tout ce que tu auras c'est:
Err.Description = description
Err.Number = numéro d'erreur
Err.Source = nom de la base


--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Yannick Croteau" a écrit dans le message de
news:r7xjb.8745$
Bonjour tout le monde!!

Je suis entrain de monté un petit module pour envoyé un e-mail lorsqu'il y
a

un erreur de code VBA qui se produit sur un poste client Access. Si vous
voulez le code source vous me ferez signe, ça va me faire plaisir de vous
le

donner, malgré que je ne pense pas que ça soit un mystère pour personne.
Le

petit module fonctionne très bien, sauf que j'ai un problème au niveau de
la

présision de l'erreur...

Sous asp il est possible de générer les erreurs servers avec une
propropriété Err.line qui renvoie le numéro de la ligne où l'erreur s'ait
produite et j'aimerais avoir l'équivalent en VBA Access. J'ai pu remarqué
à

faisant un peu le tour de l'aide VBA qu'il existe des propritété semblable
pour les modules et le modules de Classe, cependant rien dans le cas d'une
fonction introduite dans un formulaire où encore un Sub d'évènement. À
moins

que je mettes toutes les subs et fonctions en module, mais vous devinez
que

j'aimerais grandement éviter ces longues modifications.....

Est-ce que quelqu'un aurait un idée?

Merci à l'avance!
Yannick
www.frogtuning.com
Access, ASP et SQL Server.






Avatar
Yannick Croteau
Je pense avoir trouvé une solution, peut-être pas complète mais
satisfaisante... =)

Regarde-moi ben aller ( Comme ont dit au Québec ) =)

Yannick


"Raymond" a écrit dans le message de
news:
Bonsoir.

Tu n'auras pas le n° de ligne, tout ce que tu auras c'est:
Err.Description = description
Err.Number = numéro d'erreur
Err.Source = nom de la base


--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Yannick Croteau" a écrit dans le message de
news:r7xjb.8745$
Bonjour tout le monde!!

Je suis entrain de monté un petit module pour envoyé un e-mail lorsqu'il
y


a
un erreur de code VBA qui se produit sur un poste client Access. Si vous
voulez le code source vous me ferez signe, ça va me faire plaisir de
vous


le
donner, malgré que je ne pense pas que ça soit un mystère pour personne.
Le

petit module fonctionne très bien, sauf que j'ai un problème au niveau
de


la
présision de l'erreur...

Sous asp il est possible de générer les erreurs servers avec une
propropriété Err.line qui renvoie le numéro de la ligne où l'erreur
s'ait


produite et j'aimerais avoir l'équivalent en VBA Access. J'ai pu
remarqué


à
faisant un peu le tour de l'aide VBA qu'il existe des propritété
semblable


pour les modules et le modules de Classe, cependant rien dans le cas
d'une


fonction introduite dans un formulaire où encore un Sub d'évènement. À
moins

que je mettes toutes les subs et fonctions en module, mais vous devinez
que

j'aimerais grandement éviter ces longues modifications.....

Est-ce que quelqu'un aurait un idée?

Merci à l'avance!
Yannick
www.frogtuning.com
Access, ASP et SQL Server.









Avatar
Yannick Croteau
Bon... finalement, je vais laisser tomber... =(

J'étais capable d'avoir toutes les informations que j'avais besoin sauf
une.....

Un fameux "current line".... que ça soit de l'erreur ou du code présentement
exécuté ( l'endroit de mon curseur est dans le code ).

je pouvais avoir :
- le nom du module ( que ça soit Module, Class, État ou Formulaire ) ...
- toutes les procédures ( leur nom ) comprisent dans le module de code (
État ou formulaire ),
- le nombre de ligne de chacune des procédures
- où la procédure commence,
- où la procédure fini

mais j'ai rien, mais absoluant rien pour situer mon curseur,

donc ces informations ne me servent absolument à rien....

Rien n'empêche que mon code fonctionne très bien, mais je vais être obligé
de marquer le nom des procédures manuellement dans ma fonction.
Je ne pourrai finalement pas agir avec des variables pour ce qui est du nom
de la procédure ou de la ligne d'erreur.

Je pourrais toujours initialiser une variable dans chaque module qui me
petterait d'identifier ma procédure... et puis... ouin... ça me donne une
idée ça... je retourne à mon code....
malgré que ça risque plus d'être compliqué pour rien.... mais bon...

Si jamais vous avez un idée à ce sujet, vous pouvez toujours me le faire
parvenir...

Merci encore de votre aide!!

Yannick
www.frogtuning.com
Access, ASP et SQLServer

"Raymond" a écrit dans le message de
news:
Bonsoir.

Tu n'auras pas le n° de ligne, tout ce que tu auras c'est:
Err.Description = description
Err.Number = numéro d'erreur
Err.Source = nom de la base


--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Yannick Croteau" a écrit dans le message de
news:r7xjb.8745$
Bonjour tout le monde!!

Je suis entrain de monté un petit module pour envoyé un e-mail lorsqu'il
y


a
un erreur de code VBA qui se produit sur un poste client Access. Si vous
voulez le code source vous me ferez signe, ça va me faire plaisir de
vous


le
donner, malgré que je ne pense pas que ça soit un mystère pour personne.
Le

petit module fonctionne très bien, sauf que j'ai un problème au niveau
de


la
présision de l'erreur...

Sous asp il est possible de générer les erreurs servers avec une
propropriété Err.line qui renvoie le numéro de la ligne où l'erreur
s'ait


produite et j'aimerais avoir l'équivalent en VBA Access. J'ai pu
remarqué


à
faisant un peu le tour de l'aide VBA qu'il existe des propritété
semblable


pour les modules et le modules de Classe, cependant rien dans le cas
d'une


fonction introduite dans un formulaire où encore un Sub d'évènement. À
moins

que je mettes toutes les subs et fonctions en module, mais vous devinez
que

j'aimerais grandement éviter ces longues modifications.....

Est-ce que quelqu'un aurait un idée?

Merci à l'avance!
Yannick
www.frogtuning.com
Access, ASP et SQL Server.









Avatar
Raymond
Tu peux faire passer ton code ? ça peut interesser quelqu'un.

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Yannick Croteau" a écrit dans le message de
news:h9Djb.2345$
Bon... finalement, je vais laisser tomber... =(

J'étais capable d'avoir toutes les informations que j'avais besoin sauf
une.....

Un fameux "current line".... que ça soit de l'erreur ou du code
présentement

exécuté ( l'endroit de mon curseur est dans le code ).

je pouvais avoir :
- le nom du module ( que ça soit Module, Class, État ou Formulaire ) ...
- toutes les procédures ( leur nom ) comprisent dans le module de code (
État ou formulaire ),
- le nombre de ligne de chacune des procédures
- où la procédure commence,
- où la procédure fini

mais j'ai rien, mais absoluant rien pour situer mon curseur,

donc ces informations ne me servent absolument à rien....

Rien n'empêche que mon code fonctionne très bien, mais je vais être obligé
de marquer le nom des procédures manuellement dans ma fonction.
Je ne pourrai finalement pas agir avec des variables pour ce qui est du
nom

de la procédure ou de la ligne d'erreur.

Je pourrais toujours initialiser une variable dans chaque module qui me
petterait d'identifier ma procédure... et puis... ouin... ça me donne une
idée ça... je retourne à mon code....
malgré que ça risque plus d'être compliqué pour rien.... mais bon...

Si jamais vous avez un idée à ce sujet, vous pouvez toujours me le faire
parvenir...

Merci encore de votre aide!!

Yannick


Avatar
Yannick Croteau
Salut Raymond et tout le monde!

Voici à quoi ça ressemble.... il faut que les gestionnaires d'envoies SMTP
de IIS ( et les dépendances nécessaires ) soient installées sur le poste
client.
Cependant, je pense qu'il est possible de modifier le code dans le cas du
CDOSYS pour le faire passer par un Server Exchange, un smtp de server ou un
smtp de compagnie, mais il faudrait que je vérifie.
Il est aussi possible d'effectuer ces tâches avec d'autres éléments ActiveX
(COM ou COM+) si vous les possédez comme par exemple JMail ou ASPEmail.

J'ai testé le présent script seulement avec le CDOSYS, mais le CDONTS
devrait être une formalité selon mon expérience...

à mettre pour la gestion de l'erreur....
----------------------------------------------------------------------------
-----------------------------------------
Sub Nom_du_Sub_ou_Function()
On Error GoTo Err_Trap

'insérer le code ici.....

Exit_Sub_Now:
Exit Sub

Err_Trap:

Dim strModuleName As String

If Application.CurrentObjectType = 2 Then
strModuleName = Forms(Application.CurrentObjectName).Module.name
ElseIf Application.CurrentObjectType = 3 Then
strModuleName = Reports(Application.CurrentObjectName).Module.name
ElseIf Application.CurrentObjectType = 5 Then
strModuleName = Application.CurrentObjectName
End If

Email_Error Err.Number, Err.Description, Err.Source, strModuleName,
"Nom_du_Sub_ou_Function" ' Elle est là ma faiblesse.... =(
Resume Exit_Sub_Now
End Sub
----------------------------------------------------------------------------
-----------------------------------------------

Et le sub en question....

----------------------------------------------------------------------------
--------------------------------------------
Sub Email_Error(Number As Long, Description As String, Source As String,
Module_Actif As String, Procedure As String)
On Error GoTo Email_Error_error

'----- Utile dans le cas une frontal Access sur base de données SQLServer
' If Number = -2147467259 Then
' MsgBox "Un erreur de connection quelconque s'est effectué" & vbLf & _
' "Veuillez vérifier si vous avez un Firewall ou quelque chose
d'autre" & vbLf & _
' "pouvant nuire à votre connection", vbCritical + vbOKOnly,
"Erreur connection au server!"
' Exit Sub
'End If
'-----------------------------------------------------------------

Dim Message As String
Dim Test As Integer

Test = 0

Message = "Numéro d'erreur : " & CStr(Number) & vbLf & _
"Description : " & Description & vbLf & _
"Source : " & Source & vbLf & _
"Module : " & Module_Actif & vbLf & _
"Procédure : " & Procedure

CDOSYS: ' Sous Windows XP et Windows Server 2003

Dim iMsg As Object
Set iMsg = CreateObject("CDO.Message")
Dim iConf As Object
Set iConf = CreateObject("CDO.Configuration")
Dim Flds As Object
Set Flds = iConf.Fields
Flds("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1
Flds("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirecto
ry") = "c:inetpubmailrootpickup"
Flds.Update

Set iMsg.Configuration = iConf
iMsg.To = "" 'Courriel de l'administrateur de Database
iMsg.From = "" 'Courriel du client, si votre system le
permet
iMsg.Subject = "Erreur Access!"
iMsg.TextBody = Message
'Il est aussi possible de faire un .HTMLBody dans le cas du CDOSYS au
besoin....
iMsg.Send

Set iMsg = Nothing
Set iConf = Nothing

MsgBox "L'erreur suivante s'est produite : " & vbLf & Description & vbLf & _
"Un e-mail a été envoyé à l'administrateur pour le rapport d'erreur!",
vbExclamation + vbOKOnly, "Rapport d'erreur!"

GoTo Email_Error_Exit

CDONTS: ' Pour Windows 2000 et autres.... - P.S. Microsoft me fait plus
aucun support pour le dll de CDONTS

Dim ObjCDO As Object
Set ObjCDO = CreateObject("CDONTS.NewMail")

ObjCDO.To = "" 'Courriel de l'administrateur de
Database
ObjCDO.From = "" 'Courriel du client, si votre
system le permet
ObjCDO.Subject = "Erreur Access!"
ObjCDO.Body = Message
ObjCDO.Send
Set ObjCDO = Nothing

MsgBox "L'erreur suivante s'est produite : " & vbLf & Description & vbLf
& _
"Un e-mail a été envoyé à l'administrateur pour le rapport d'erreur!",
vbExclamation + vbOKOnly, "Rapport d'erreur!"

Email_Error_Exit:
Exit Sub

Email_Error_error:
If Err.Number = -2147024893 And Test = 0 Then
Test = Test + 1
Resume CDONTS
ElseIf Err.Number = -2147024893 And Test > 0 Then
MsgBox "L'erreur suivante s'est produite : " & vbLf & Message & vbLf & _
"Aucun des modules SMTP sont installés sur votre ordinateur" & vbLf & _
"Il a donc été impossible envoyer un rapport d'erreur à
l'administrateur!" & vbLf & _
"Veuillez le contacter pour l'aviser de ce fait", vbCritical + vbOKOnly,
"Transmission Impossible!"
Resume Email_Error_Exit
Else
MsgBox "L'erreur suivante s'est produite lors de l'essaie de
transmission : " & vbLf & Err.Description & vbLf & _
"Il a donc été impossible envoyé un rapport d'erreur à
l'administrateur!" & vbLf & _
"Veuillez le contacter pour l'aviser de ce fait", vbCritical + vbOKOnly,
"Erreur lors de la transmission!"
Resume Email_Error_Exit
End If

End Sub
----------------------------------------------------------------------------
-----------------------------------------------------------
Si vous avez des idées pour améliorer ce script, ça va me faire plaisir de
les connaître... :D

Au plaisir de vous aider!

Yannick Croteau
www.frogtuning.com
Access, ASP et SQLServer.

"Raymond" a écrit dans le message de
news:
Tu peux faire passer ton code ? ça peut interesser quelqu'un.

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Yannick Croteau" a écrit dans le message de
news:h9Djb.2345$
Bon... finalement, je vais laisser tomber... =(

J'étais capable d'avoir toutes les informations que j'avais besoin sauf
une.....

Un fameux "current line".... que ça soit de l'erreur ou du code
présentement

exécuté ( l'endroit de mon curseur est dans le code ).

je pouvais avoir :
- le nom du module ( que ça soit Module, Class, État ou Formulaire )
...


- toutes les procédures ( leur nom ) comprisent dans le module de code (
État ou formulaire ),
- le nombre de ligne de chacune des procédures
- où la procédure commence,
- où la procédure fini

mais j'ai rien, mais absoluant rien pour situer mon curseur,

donc ces informations ne me servent absolument à rien....

Rien n'empêche que mon code fonctionne très bien, mais je vais être
obligé


de marquer le nom des procédures manuellement dans ma fonction.
Je ne pourrai finalement pas agir avec des variables pour ce qui est du
nom

de la procédure ou de la ligne d'erreur.

Je pourrais toujours initialiser une variable dans chaque module qui me
petterait d'identifier ma procédure... et puis... ouin... ça me donne
une


idée ça... je retourne à mon code....
malgré que ça risque plus d'être compliqué pour rien.... mais bon...

Si jamais vous avez un idée à ce sujet, vous pouvez toujours me le faire
parvenir...

Merci encore de votre aide!!

Yannick