Bonjour et bonne année à tous
Je vous écris afin de vous soumettre un soucis de contenu de variable.
Mon pb est apparu quand j'ai voulu améliorer ma gestion d'erreur en générant un journal Eventlog et en voulant récupérer l'ensemble de la chaine d'exécution.
La philosophie: Je gère les erreurs dans une procédure d’entête qui peut faire appelle à diverse fonction ou procédure.
Chaque fonction ou procédure stocke leur nom ainsi que celui de leur module dans un variable globale puis remonte le tout à la procédure d'entête qui écrit dans l'eventlog.
Voici comment j'ai procédé
J'ai déclaré les variables Fonctions, Modules, Commandes en tant que variables globales de mon projet un module appelé Commun_Declarations_Globales
Sur un formulaire (F_Acceuil), un bouton fait appel à une fonction donc voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ' Variable de gestion des erreurs Public Fonctions As String Public Modules As String Public commandes As String
La fonction Date_fichier du module Commun_Systeme_Fichiers contient le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Private Sub Liste_fic() '*************************************** '* Gestion des erreurs Module de tête * '*************************************** Dim i As Long ' Récupére le nom de la procédure active Fonctions = "Liste_fic" Modules = Module.Name On Error GoTo Erreur '************************************************************* '************************************************************* 1 Me.T_Date_Inc_GLPI.Value = Date_fichier(Source_Import_GLPI_Incidents_Demandes, "ExportTicketsQuotidienMOA.csv") Exit Sub Erreur: commandes = "Ligne " & Erl() & " : " & commandes Call EventLog(Modules, Fonctions, commandes, Err.Number, Err.Description) commandes = Empty Modules = Module.Name ' Récupére le nom de la procédure active Fonctions = "Liste_fic" Resume Next
Elle fait bien sûr autre chose mais c'est pour les tests
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 '************************************ '* Gestion des erreurs sous module * '************************************ Dim i As Long ' Récupére le nom de la procédure active With Application.VBE.ActiveCodePane .GetSelection i, 0, 0, 0 Fonctions = Fonctions & "\" & .CodeModule.ProcOfLine(i, 0) End With Modules = Modules & "\" & Application.VBE.SelectedVBComponent.Name '************************************************************* '************************************************************* O = 5 / 0 End Function
Voila ce que je voulais c'était inscrire Modules=Form_F_Acceuil\Commun_Systeme_Fichiers et dans Fonctions=Liste_fic\Date_fichier
Cela fonctionne parfaitement en mode Pas à Pas en revanche si je lance la fonction sans pas à pas, j'obtiens
Modules=Form_F_Acceuil\Form_F_Acceuil et dans Fonctions=Liste_fic\Liste_fic
Quelqu'un pourrait-il me dire d'où vient mon problème je fouille internet depuis quelque temps mais je trouve pas.
Pourquoi quand il passe dans la fonction Date_fichier il récupère bien le module et la fonction et pas si j'execute sans passer dans Date_Fichier en mode pas à pas???
Je viens de faire le test en n'appelant pas la gestion d'erreur depuis le formulaire mais depuis un fonction stocker dans un module et c'est pareil sauf qu'il a fallu que je change la ligne:
Par la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part Modules = Module.Name
Encore merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Module = Application.VBE.SelectedVBComponent.Name
Partager