Je travaille avec VBA depuis un bon moment maintenant, mais je ne suis toujours pas très sûr de la gestion des erreurs.
Un bon article est celui de
CPearson.com
Cependant, je me demande toujours si la façon dont je faisais la gestion des erreurs était/est complètement fausse :
Bloc 1
On Error Goto ErrCatcher
If UBound(.sortedDates) > 0 Then
// Code
Else
ErrCatcher:
// Code
End If
La clause if, parce que si elle est vraie, sera exécutée et si elle échoue, le Goto ira dans la partie Else, puisque le UBound d’un tableau ne devrait jamais être zéro ou moins sans une erreur, cette méthode a assez bien fonctionné jusqu’à présent.
Si j’ai bien compris, cela devrait être comme ceci :
Bloc 2
On Error Goto ErrCatcher
If Ubound(.sortedDates) > 0 Then
// Code
End If
Goto hereX
ErrCatcher:
//Code
Resume / Resume Next / Resume hereX
hereX:
Ou même comme ceci :
Bloc 3
On Error Goto ErrCatcher
If Ubound(.sortedDates) > 0 Then
// Code
End If
ErrCatcher:
If Err.Number <> 0 then
//Code
End If
La manière la plus courante que je vois est celle où le “Catcher” d’erreurs est à la fin d’une sub et la Sub se termine en fait avant avec un “Exit Sub”, mais n’est-ce pas un peu déroutant si la Sub est assez grande de devoir aller d’avant en arrière pour lire le code ?
Bloc 4
Source du code suivant :
CPearson.com
On Error Goto ErrHandler:
N = 1 / 0 ' cause an error
'
' more code
'
Exit Sub
ErrHandler:
' error handling code'
Resume Next
End Sub
Cela devrait-il être comme dans le Bloc 3 ?