Pb de transfert de variable
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
Code:
1 2 3 4
| ' Variable de gestion des erreurs
Public Fonctions As String
Public Modules As String
Public commandes As String |
Sur un formulaire (F_Acceuil), un bouton fait appel à une fonction donc voici le code:
Code:
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 |
La fonction Date_fichier du module Commun_Systeme_Fichiers contient le code suivant:
Code:
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 |
Elle fait bien sûr autre chose mais c'est pour les tests :lol:
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???:calim2::calim2::calim2:
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:
Code:
Modules = Module.Name
Par la ligne
Code:
Module = Application.VBE.SelectedVBComponent.Name
Encore merci pour votre aide.