Liste des variables pour gestion d'erreur
Fermé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
-
Modifié par GégéLAMBERT le 17/06/2013 à 13:53
GégéLAMBERT Messages postés 615 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 - 14 nov. 2013 à 10:56
GégéLAMBERT Messages postés 615 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 - 14 nov. 2013 à 10:56
A voir également:
- Liste des variables pour gestion d'erreur
- Erreur 0x80070643 - Accueil - Windows
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
16 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
17 juin 2013 à 14:06
17 juin 2013 à 14:06
Pour le débugage, n'est-il pas plus simple de mettre un simple Stop dans le gestionnaire d'erreur ?
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
17 juin 2013 à 14:43
17 juin 2013 à 14:43
Merci pour la piste...
Mais l'application est déployée chez 4 utilisateurs, et il faut que je récupère les infos d'erreur sans pour autant planter les utilisateurs...
Gégé
Mais l'application est déployée chez 4 utilisateurs, et il faut que je récupère les infos d'erreur sans pour autant planter les utilisateurs...
Gégé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
5 juil. 2013 à 12:35
5 juil. 2013 à 12:35
UP....
Je vois bien que la question est simple et la réponse complexe.
Mais je sais aussi que CCM compte des membres tellement balèzes que l'un d'entre eux à sûrement ma réponse !!!
(Je flatte, je flatte...)
Alors, les Dieux VBA de CCM, pas inspirés ? ;-)
Gégé
Je vois bien que la question est simple et la réponse complexe.
Mais je sais aussi que CCM compte des membres tellement balèzes que l'un d'entre eux à sûrement ma réponse !!!
(Je flatte, je flatte...)
Alors, les Dieux VBA de CCM, pas inspirés ? ;-)
Gégé
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
5 juil. 2013 à 12:47
5 juil. 2013 à 12:47
Bonjour,
De quel façon le "rapport d'erreurs" te parvient-il ?
A+
De quel façon le "rapport d'erreurs" te parvient-il ?
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
8 juil. 2013 à 11:29
8 juil. 2013 à 11:29
Bonjour Lermitte222,
J'utilise le principe de cette gestion d'erreur dans plusieurs applications. Suivant les cas, ça peut être :
- Un simple message donné à l'utilisateur ,
- L'enregistrement dans un fichier log (local ou sur FTP)
- L'envoi d'un mail au support.
Mon pb, c'est de pouvoir l'enrichir avec les noms et valeurs des variables de la fonction/sub ayant généré l'erreur, au moment où l'erreur est générée.
La lecture, par VBA, de la fenêtre des variables locales pourrait être la solution, mais je ne sais pas y accéder.
Gégé
J'utilise le principe de cette gestion d'erreur dans plusieurs applications. Suivant les cas, ça peut être :
- Un simple message donné à l'utilisateur ,
- L'enregistrement dans un fichier log (local ou sur FTP)
- L'envoi d'un mail au support.
Mon pb, c'est de pouvoir l'enrichir avec les noms et valeurs des variables de la fonction/sub ayant généré l'erreur, au moment où l'erreur est générée.
La lecture, par VBA, de la fenêtre des variables locales pourrait être la solution, mais je ne sais pas y accéder.
Gégé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
Modifié par GégéLAMBERT le 8/07/2013 à 16:58
Modifié par GégéLAMBERT le 8/07/2013 à 16:58
Je monologue...
Petite lueur d'espoir : à partir du Handle de la fenêtre "Variables locales", et a l'aide des API EnumChildWindows, GetWindowText et GetClassName, j'accède aux contrôles de la fenêtre "Variables locales" et je peux lire leur contenu...
Mais...
Je crois que j'avance, et puis j'avance pas, parce que :
Tous les contrôles ne sont pas énumérés par EnumChildWindows : j'ai la fenêtre, les ScrollBars, le Bouton, mais pas le contenu du tableau des variables.
Donc, nouvel appel au secours : est-ce que quelqu'un a une méthode pour accéder à ces contrôles et à leur contenu ? Un équivalent de EnumChildWindows, mais qui va jusqu'au bout de la démarche ?
Merci d'avance.
Gégé
Plus je connais les hommes, plus j'aime ma femme !
Petite lueur d'espoir : à partir du Handle de la fenêtre "Variables locales", et a l'aide des API EnumChildWindows, GetWindowText et GetClassName, j'accède aux contrôles de la fenêtre "Variables locales" et je peux lire leur contenu...
Mais...
Je crois que j'avance, et puis j'avance pas, parce que :
Tous les contrôles ne sont pas énumérés par EnumChildWindows : j'ai la fenêtre, les ScrollBars, le Bouton, mais pas le contenu du tableau des variables.
Donc, nouvel appel au secours : est-ce que quelqu'un a une méthode pour accéder à ces contrôles et à leur contenu ? Un équivalent de EnumChildWindows, mais qui va jusqu'au bout de la démarche ?
Merci d'avance.
Gégé
Plus je connais les hommes, plus j'aime ma femme !
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
10 juil. 2013 à 18:47
10 juil. 2013 à 18:47
Re,
est-ce que quelqu'un a une méthode pour accéder à ces contrôles et à leur contenu ? Beh... non, j'ai pas de piste sur ce sujet.
Serait pas plus simple dans la détection d'erreur de créer un fichier Log avec tout ce que tu veux ?
A+
est-ce que quelqu'un a une méthode pour accéder à ces contrôles et à leur contenu ? Beh... non, j'ai pas de piste sur ce sujet.
Serait pas plus simple dans la détection d'erreur de créer un fichier Log avec tout ce que tu veux ?
A+
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
11 juil. 2013 à 09:10
11 juil. 2013 à 09:10
Bonjour lermite et merci de te pencher sur mon pb.
Le pb, d'ailleurs, n'est pas de créer un fichier log... le pb, c'est l'autre partie de ta question : "avec tout ce que tu veux" !
Heureusement, le fait de pouvoir récupérer les variables et leurs valeurs dans la fonction ayant déclenché l'erreur n'est pas bloquant. C'est juste une piste que je suis depuis quelques temps, et que j'aimerais voir aboutir.
J'ai l'impression de pas être loin. Il faut juste que je trouve la solution pour accéder, via leur handle, aux contrôles "complexes" de la fenêtre des variables locales, puisque, pour l'instant, je me contente du titre de la fenêtre, des scrollbars, le bouton... Tout ce dont je n'ai aucune utilité, en fait !
A moins que, tout droit sorti du chapeau, mon sauveur arrive sur son fier destrier blanc, et me donne la fonction qui permet d'énumérer, pour une procédure donnée, toutes ses variables et la valeur de chacune...
Je perds pas espoir...
Gégé
Le pb, d'ailleurs, n'est pas de créer un fichier log... le pb, c'est l'autre partie de ta question : "avec tout ce que tu veux" !
Heureusement, le fait de pouvoir récupérer les variables et leurs valeurs dans la fonction ayant déclenché l'erreur n'est pas bloquant. C'est juste une piste que je suis depuis quelques temps, et que j'aimerais voir aboutir.
J'ai l'impression de pas être loin. Il faut juste que je trouve la solution pour accéder, via leur handle, aux contrôles "complexes" de la fenêtre des variables locales, puisque, pour l'instant, je me contente du titre de la fenêtre, des scrollbars, le bouton... Tout ce dont je n'ai aucune utilité, en fait !
A moins que, tout droit sorti du chapeau, mon sauveur arrive sur son fier destrier blanc, et me donne la fonction qui permet d'énumérer, pour une procédure donnée, toutes ses variables et la valeur de chacune...
Je perds pas espoir...
Gégé
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
11 juil. 2013 à 22:51
11 juil. 2013 à 22:51
Bonjour Gégé,
Le texte de la fenêtre variables locales ne semblant pas facilement accessible, je te propose une autre piste (pas forcement très simple!).
Si tu utilises l'option Explicit, toutes les variables sont déclarées.
Tu connais le module et la procédure, une analyse du code, plus particulièrement des lignes de déclaration, doit permettre d'établir la liste des variables déclarées dans chaque portée et donc d'enregistrer leur valeur.
Mais, vu la multitude de propriétés des objets il faudra que te définisse un cahier des charges limitatif !
D'autre part, plutôt qu'enregistrer toutes les variables, il me semble suffisant d'enregistrer uniquement celles qui sont susceptibles de provoquer l'erreur : lorsque les lignes de code sont numérotées, la fonction ERL() renvoi le numéro de la ligne de code qui provoque l'erreur. Il suffit d'enregistrer uniquement les variables de cette ligne.
voir ce lien https://silkyroad.developpez.com/VBA/VisualBasicEditor/#LII-D
Le texte de la fenêtre variables locales ne semblant pas facilement accessible, je te propose une autre piste (pas forcement très simple!).
Si tu utilises l'option Explicit, toutes les variables sont déclarées.
Tu connais le module et la procédure, une analyse du code, plus particulièrement des lignes de déclaration, doit permettre d'établir la liste des variables déclarées dans chaque portée et donc d'enregistrer leur valeur.
Mais, vu la multitude de propriétés des objets il faudra que te définisse un cahier des charges limitatif !
D'autre part, plutôt qu'enregistrer toutes les variables, il me semble suffisant d'enregistrer uniquement celles qui sont susceptibles de provoquer l'erreur : lorsque les lignes de code sont numérotées, la fonction ERL() renvoi le numéro de la ligne de code qui provoque l'erreur. Il suffit d'enregistrer uniquement les variables de cette ligne.
voir ce lien https://silkyroad.developpez.com/VBA/VisualBasicEditor/#LII-D
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
15 juil. 2013 à 11:37
15 juil. 2013 à 11:37
Bonjour Patrice, et merci pour la piste.
J'ai, effectivement, fait une procédure d'analyse de ma fonction qui me renvoie le nom des variables (et... oui, j'utilise systématiquement l'option explicit).
C'est une des premières pistes que j'ai suivie. Malheureusement, je n'accède qu'aux noms de variables, et pas à leur valeur. C'est agaçant !
La numérotation des lignes permet d'avoir plus de précision sur le déclenchement d'erreur, mais je trouve le système, non natif dans VBA, assez lourd à vivre au quotidien sur un code en cours d'élaboration.
C'est vrai que le MZ-Tools simplifie la chose... Mais, si ERL m'indique la ligne, je n'ai toujours pas accès aux valeurs de mes variables.
Je tourne en rond. Je m'approche, mais j'arrive pas à ouvrir la dernière porte !
Heureusement, c'est pas bloquant pour mes développements en cours. On va dire que c'est de la recherche fondamentale... ça fait sérieux :-)
En tout cas, merci de te pencher sur mon problème, et n'hésite pas à me suggérer d'autres pistes. Je suis preneur !
Gégé
J'ai, effectivement, fait une procédure d'analyse de ma fonction qui me renvoie le nom des variables (et... oui, j'utilise systématiquement l'option explicit).
C'est une des premières pistes que j'ai suivie. Malheureusement, je n'accède qu'aux noms de variables, et pas à leur valeur. C'est agaçant !
La numérotation des lignes permet d'avoir plus de précision sur le déclenchement d'erreur, mais je trouve le système, non natif dans VBA, assez lourd à vivre au quotidien sur un code en cours d'élaboration.
C'est vrai que le MZ-Tools simplifie la chose... Mais, si ERL m'indique la ligne, je n'ai toujours pas accès aux valeurs de mes variables.
Je tourne en rond. Je m'approche, mais j'arrive pas à ouvrir la dernière porte !
Heureusement, c'est pas bloquant pour mes développements en cours. On va dire que c'est de la recherche fondamentale... ça fait sérieux :-)
En tout cas, merci de te pencher sur mon problème, et n'hésite pas à me suggérer d'autres pistes. Je suis preneur !
Gégé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
29 juil. 2013 à 15:34
29 juil. 2013 à 15:34
Up...
Ben dîtes donc, ça n'inspire pas les foules, ma "petite" question...
Si j'avance, je viendrais donner la solution...
Gégé
Ben dîtes donc, ça n'inspire pas les foules, ma "petite" question...
Si j'avance, je viendrais donner la solution...
Gégé
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
29 juil. 2013 à 21:33
29 juil. 2013 à 21:33
Bonjour,
J'ai la chance d'être actuellement en vacances, je ne renterais donc pas dans le détail, mais je pense qu'il est possible de créer une procédure ad hoc à laquelle on transmet le nom de la variable et qui retourne sa valeur.
C'est un peu tordu mais l'idée c'est de modifier cette procédure par macro pour qu'elle donne le bon résultat.
Bon courage
J'ai la chance d'être actuellement en vacances, je ne renterais donc pas dans le détail, mais je pense qu'il est possible de créer une procédure ad hoc à laquelle on transmet le nom de la variable et qui retourne sa valeur.
C'est un peu tordu mais l'idée c'est de modifier cette procédure par macro pour qu'elle donne le bon résultat.
Bon courage
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
8 août 2013 à 16:17
8 août 2013 à 16:17
Bonjour Patrice,
Inutile de dire, mais je le dis quand même : tu as éveillé ma curiosité.
Profite bien des vacances... mais rentre vite quand même !
Gégé
Inutile de dire, mais je le dis quand même : tu as éveillé ma curiosité.
Profite bien des vacances... mais rentre vite quand même !
Gégé
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
12 août 2013 à 20:24
12 août 2013 à 20:24
Encore quelques jours (up)
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
17 sept. 2013 à 11:21
17 sept. 2013 à 11:21
@Patrice
C'est maintenant moi qui suis de retour de vacances...
Alors, toujours partant pour cogiter sur mon pb ?
Gégé
C'est maintenant moi qui suis de retour de vacances...
Alors, toujours partant pour cogiter sur mon pb ?
Gégé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
23 sept. 2013 à 09:26
23 sept. 2013 à 09:26
Bonjour,
Je viens d'explorer une autre piste, initiée par Patrice33740, mais je n'aboutit toujours pas.
J'ai créé une sub Liste_VARIABLES que j'appelle en début de traitement d'erreur. Cette sub va:
- Lire les lignes de la fonction ayant déclenché l'erreur,
- Détecter mes déclarations de variables,
- Créer des lignes de code permettant de concaténer le nom et la valeur de chaque variable,
- Ecrire ces lignes de code dans le traitement d'erreur, juste après l'appel de ma sub Liste_VARIABLES.
C'est beau, et ça fonctionne...
Mais, car il y a toujours un Mais !
Les lignes de code que ma sub vient d'écrire ne sont pas exécutées, comme si la fonction ayant déclenché l'erreur avait chargé en mémoire, dès le début de son exécution, tout son contenu, et que le contenu modifié n'était pas pris en compte...
Donc, question : y a-t-il un moyen de rafraichir tout ça afin que les lignes que je viens d'insérer soient exécutées ?
Je tourne en rond !!!
Merci à ceux qui se pencheront sur le sujet.
Gégé
Je viens d'explorer une autre piste, initiée par Patrice33740, mais je n'aboutit toujours pas.
J'ai créé une sub Liste_VARIABLES que j'appelle en début de traitement d'erreur. Cette sub va:
- Lire les lignes de la fonction ayant déclenché l'erreur,
- Détecter mes déclarations de variables,
- Créer des lignes de code permettant de concaténer le nom et la valeur de chaque variable,
- Ecrire ces lignes de code dans le traitement d'erreur, juste après l'appel de ma sub Liste_VARIABLES.
C'est beau, et ça fonctionne...
Mais, car il y a toujours un Mais !
Les lignes de code que ma sub vient d'écrire ne sont pas exécutées, comme si la fonction ayant déclenché l'erreur avait chargé en mémoire, dès le début de son exécution, tout son contenu, et que le contenu modifié n'était pas pris en compte...
Donc, question : y a-t-il un moyen de rafraichir tout ça afin que les lignes que je viens d'insérer soient exécutées ?
Je tourne en rond !!!
Merci à ceux qui se pencheront sur le sujet.
Gégé
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
23 sept. 2013 à 23:16
23 sept. 2013 à 23:16
Boniour Gégé,
Désolé de te laisser chercher seul mais ces temps-ci je suis très occupé et je passe peu temps sur le Forum.
Si tu écris les nouvelles lignes de code dans une autre Sub que tu appelles après l'appel de ta sub Liste_VARIABLES ???
Ou autrement, peut-être qu'un DoEvents avant le code ...
Désolé de te laisser chercher seul mais ces temps-ci je suis très occupé et je passe peu temps sur le Forum.
Si tu écris les nouvelles lignes de code dans une autre Sub que tu appelles après l'appel de ta sub Liste_VARIABLES ???
Ou autrement, peut-être qu'un DoEvents avant le code ...
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
26 sept. 2013 à 13:50
26 sept. 2013 à 13:50
Bonjour,
Merci de suivre le fil...
Si j'écris les lignes de code dans une autre Sub, je me retrouve avec le problème des valeurs de mes variables qui ne sont accessibles que dans la sub qui les contient...
J'ai essayé un DoEvents, sans résultat...
J'ai essayé un DoCmd.Save acModule, Nom_MODULE : Erreur...
Il me faudrait compiler ma sub alors qu'elle est en cours d'exécution... Pas simple, tout ça.
A suivre...
Gégé
Merci de suivre le fil...
Si j'écris les lignes de code dans une autre Sub, je me retrouve avec le problème des valeurs de mes variables qui ne sont accessibles que dans la sub qui les contient...
J'ai essayé un DoEvents, sans résultat...
J'ai essayé un DoCmd.Save acModule, Nom_MODULE : Erreur...
Il me faudrait compiler ma sub alors qu'elle est en cours d'exécution... Pas simple, tout ça.
A suivre...
Gégé
GégéLAMBERT
Messages postés
615
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
24 octobre 2014
10
14 nov. 2013 à 10:56
14 nov. 2013 à 10:56
Bonjour,
Un petit UP, pour voir si quelqu'un possède une solution, une piste, un indice... je suis preneur.
Donc, j'ai continué mes recherches, mais toujours sans obtenir de résultat.
Le problème de ma fonction qui est compilée en début d'exécution et qui, de fait, ne prend pas en compte les modifications que j'y apporte pendant son exécution me bloque toujours.
J'ai essayé un DoCmd.RunCommand acCmdCompileLoadedModules... sans effet.
J'ai essayé aussi acCmdCompileAllModules et acCmdCompileAndSaveAllModules, tous les deux provoquent des plantages d'appli systématiques ou aléatoires...
J'ai fouillé dans les tables système, au cas où l'appli y stockerait mes variables et leurs valeurs... rien trouvé, ça aurait été trop simple.
Désespéré, j'ai cherché du côté de la base de registre... C'est pas là non plus qu'ACCESS stocke ce qui m'intéresse. Dommage.
Et pourtant, c'est sûr : ACCESS stocke tout ça quelque part ! Mais ou ?
Je tourne en rond dans mon bocal !
C'est la première fois qu'ACCESS "récalcitre" de la sorte. Ma santé mentale se dégrade... A l'aide !
Bonne journée à tous.
Gégé
Un petit UP, pour voir si quelqu'un possède une solution, une piste, un indice... je suis preneur.
Donc, j'ai continué mes recherches, mais toujours sans obtenir de résultat.
Le problème de ma fonction qui est compilée en début d'exécution et qui, de fait, ne prend pas en compte les modifications que j'y apporte pendant son exécution me bloque toujours.
J'ai essayé un DoCmd.RunCommand acCmdCompileLoadedModules... sans effet.
J'ai essayé aussi acCmdCompileAllModules et acCmdCompileAndSaveAllModules, tous les deux provoquent des plantages d'appli systématiques ou aléatoires...
J'ai fouillé dans les tables système, au cas où l'appli y stockerait mes variables et leurs valeurs... rien trouvé, ça aurait été trop simple.
Désespéré, j'ai cherché du côté de la base de registre... C'est pas là non plus qu'ACCESS stocke ce qui m'intéresse. Dommage.
Et pourtant, c'est sûr : ACCESS stocke tout ça quelque part ! Mais ou ?
Je tourne en rond dans mon bocal !
C'est la première fois qu'ACCESS "récalcitre" de la sorte. Ma santé mentale se dégrade... A l'aide !
Bonne journée à tous.
Gégé