Gestion des erreurs
Bonjour,
J'ai créé un msgbox qui s'exécute à la place de la boite de dialogue "débogage" quand on a un problème de macro.
J'aurai voulu que ça me rajoute dans les données suivantes automatiquement :
Numéro du module
Nom de la macro
mais je ne trouve pas comment le faire sans entrée les données par macro ?
errorHandler:
MsgBox "Une erreur s'est produite!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Desciption de l'erreur:" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Err.Description & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Si vous n'arrivez pas à résoudre le problème :" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "1. Enregistrez le fichier" & Chr(13) & Chr(10) & "2. Contactez l'administrateur en indiquant les données ci-dessous" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Module numéro" & " ? " & Chr(13) & Chr(10) & "Nom Macro" & " ? "J'ai déjà trouvé comment insérer le numéro du module !
Il me reste encore à trouver le nom de la macro
MsgBox "Une erreur s'est produite!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Desciption de l'erreur:" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Err.Description & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Si vous n'arrivez pas à résoudre le problème :" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "1. Enregistrez le fichier" & Chr(13) & Chr(10) & "2. Contactez l'administrateur en indiquant les données ci-dessous" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & application. VBE. ActiveCodePane.CodeModule & Chr(13) & Chr(10) & "Nom Macro" & « ? »Bonjour,
J'ai déjà trouvé comment insérer le numéro du module !
Il me reste encore à trouver le nom de la macro
Coller le code ci-dessous dans la fenêtre du module créé (je l'ai fait un peu plus court...)
Sub Info_Erreur()
MsgBox "Une erreur s'est produite!" & vbCrLf & vbCrLf & vbCrLf & _
"Description de l'erreur:" & vbCrLf & vbCrLf & _
"1. Enregistrez le fichier" & vbCrLf & _
"2. Contactez l'administrateur en indiquant les données ci-dessous" & vbCrLf & vbCrLf & _
"Module numéro" & " ? " & vbCrLf & "Nom Macro" & " ? "
End SubMettez cette instruction dans votre code qui devra exécuter la macro ci-dessous --> CALL Info_Erreur
Cordialement
merci c’est bien plus court c’est parfait 🙂
Mais je n’ai pas encore trouvé ce que je dois mettre à la place des points d’interrogation « ? »
Mais je n’ai pas encore trouvé ce que je dois mettre à la place des points d’interrogation « ? »
c'était quoi l'idée de renseigner le module ? Le message peut suffire car l'admin saura faire une recherche dans l'éditeur pour retrouver le code. Ou plus simple, lorsque le code renverra une erreur il lui suffira de cliquer sur "Debogage" pour voir la ligne à problème.
Si les codes en appellent d'autres, le bug peut se produire et l'erreur peut se trouver tout à fait ailleurs... keep in mind !
Cordialement
merci je vais laisser cette idée de côté pour le moment.
C'est un fichier qui est utilisé par 850 personnes environ. Et quand il y a des erreurs de leurs parts (mis un mauvais mot de passe sur une feuille etc), alors la fenêtre débogage arrive ce qui ouvre le VBA. J'ai déjà fait en sorte qu'ils n'arrivent plus dans le VBA mais j'aurai voulu que quand ils m'envoient le fichier, je trouve rapidement d'où vient l'erreur avec le numéro de module et le nom de la macro qui n'a pas fonctionné.
J'ai déjà fait en sorte qu'ils n'arrivent plus dans le VBA mais j'aurai voulu que quand ils m'envoient le fichier, je trouve rapidement d'où vient l'erreur avec le numéro de module et le nom de la macro qui n'a pas fonctionné.
Je ne sais pas si cela est possible mais peut être via un module de classe (plus compliqué à mettre en place et cela sort un peu de mes compétences).
Par contre peut être une idée à suivre :
- dans un seul module de votre fichier en entête, déclarer une variable public --> "Public ErreurMacro As String" (attention à placer avant toutes les macros du module. Juste en dessous d'option explicit par exemple)
- Dans chaque Macro, ajouter au début une ligne qui reprend le nom de la macro -> exemple si la macro s'appelle TEST vous mettez ceci --> " ErreurMacro = "TEST""
- Mettre en fin de code une ligne qui renvoie à la macro "Info_Erreur" telle que je l'ai placée dans mon post précédent
Voici un exemple de ce que vous pourriez avoir dans votre module:
Option Explicit
Public ErreurMacro As String
Sub Test()
ErreurMacro = "Test" 'nom de macro
On Error GoTo Fin
MsgBox Application.Caller 'cette ligne est juste là pour exemple. Donc mettre vos lignes de code à la place
Exit Sub
Fin: Call Info_Erreur
End Sub
Sub Info_Erreur()
MsgBox "Une erreur s'est produite!" & vbCrLf & vbCrLf & vbCrLf & _
"Description de l'erreur:" & vbCrLf & vbCrLf & _
"1. Enregistrez le fichier" & vbCrLf & _
"2. Contactez l'administrateur en indiquant les données ci-dessous" & vbCrLf & vbCrLf & _
"Nom Macro : " & ErreurMacro
End SubAttention, je vous rappelle que la variable Public qui se trouve juste en dessous d'option explicit, ne doit se trouver qu'une seul fois dans votre fichier.
Pour savoir où se trouve le code, comme je vous ai expliqué, utilisez l'éditeur VBA. Dans le menu, cliquez sur EDITION -> RECHERCHER. Tapez le nom du code puis cliquez "Projet en cours", puis Ok.
Cordialement
Merci Dan