XL 2010 errorHandler placé ds macro principale ou secondaire

Wyrgle

XLDnaute Junior
Bonjour à tous,

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.

Merci pour votre aide !!
Wyrgle
 

Wyrgle

XLDnaute Junior
Bonjour Wyrgle,

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".

Bon traitement des erreurs!
Pierre
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 092
Membres
103 116
dernier inscrit
kutobi87