Je veux mettre une petite gestion d'erreurs dans mon projet : une macro principale appelle plusieurs sous-macros (50-60 environs).
La macro principale ne présente pas de problème, mais les sous-macros parfois.
D'ou ma question : la séquence suivante
Code:
On Error GoTo errorHandler
'la procédure
Exit Sub
errorHandler:
MsgBox Err.Description
doit-elle être placée dans chaque sous-macro ou seulement dans la macro principale ? Mon but étant de lister les messages d'erreurs dans un dernier MsgBox ou bien dans un onglet.
Vouloir gérer les erreurs est une excellente idée! ... Les traiter c'est encore mieux!
Comment ça marche : en cas d'erreur un "on error goto" interrompt l'exécution du code et exécute le code écrit dans le errorhandler. Ce qui veut dire que le programme prévu n'ira pas forcement jusqu'à son terme si on se contente d'un classique MsgBox "Erreur: " & Err.Number & " " & Err.Description.
Pour contourner cette interruption il y a l'instruction "Resume" (à placer dans le errorhandler) qui permet de retourner dans le code d'origine, ce qui permet de traiter l'erreur. Par exemple dans le code suivant la division de j par i qui est=à zéro provoque une erreur, mais dans le errorhandler la valeur de i devient 1 pour lever cette erreur :
VB:
Sub demo_errhdlr()
Dim i As Byte, j As Byte
On Error GoTo errhdlr
i = 0
j = 2 / i
MsgBox j
Exit Sub
errhdlr:
i = 1
Resume
End Sub
Donc pour répondre à la question "où placer le errorhandler?" : si l'erreur est prévisible dans le corps du programme c'est bien de le mettre dans le corps, si l'erreur est prévisible dans une sous-routine, c'est bien de le mettre dans cette sous-routine. Le plus important c'est de traiter cette erreur pour éviter à l'utilisateur de te dire "Ya un bug dans ton bazar, c'est nul".
Merci pour ta réponse Pierre.
Mon programme principal est fini et ne contient pas de bug : je vais donc placer la gestion d'erreurs dans les sous-routines.