Bonjour !
Je développe une application qui présente un bug trop complexe pour que je cherche à le débuguer : dans certains cas bien identifiés, le code plante (erreur 1004) une fois avant de fonctionner lors des lancement suivants.
Je gère donc le bug en demandant à l'utilisateur de relancer le calcul manuellement lorsque le cas se présente :
VB:
ErrorManagement:
Select Case Err.Number
Case 1004
MsgBox ("Please re-launch the calculation")
End Select
Je souhaiterais automatiser le re-lancement de mon sub lorsqu'une erreur 1004 survient. Sauf que si j'écris
VB:
ErrorManagement:
Select Case Err.Number
Case 1004
Call Calculation()
End Select
je risque une boucle infinie le jour où j'ai une erreur 1004 qui survient indépendamment de ce bug !
Y a-t-il un moyen de n'effectuer le ErrorManagement QU'UNE SEULE FOIS, et afficher le message d'erreur s'il se représente ?
La réinit de cette variable peut être faite à la fin de votre macro Calculation.
Si on arrive à la fin de cette macro c'est qu'aucune erreur n'est apparue, dans ce cas vous finissez avec :
La réinit de cette variable peut être faite à la fin de votre macro Calculation.
Si on arrive à la fin de cette macro c'est qu'aucune erreur n'est apparue, dans ce cas vous finissez avec :
La réinit de cette variable peut être faite à la fin de votre macro Calculation.
Si on arrive à la fin de cette macro c'est qu'aucune erreur n'est apparue, dans ce cas vous finissez avec :
Bonsoir.
En principe c'est la disposition standard: si le contrôle à ErrorManagement est donné par On Error Goto ErrorManagement, celle ci n'est plus active en cas de nouvelle erreur survenant derrière, en mode gestion d'erreur, donc, jusqu'à exécution d'une instruction Resume pour reprendre l'exécution en mode normal.
Bonjour,
Les conditions sont bien connues (le bug arrive lorsque l'utilisateur modifie les données d'entrée d'une certaine façon). Cependant suivre l'historique des données d'entrées et tester toutes les possibilités de modifications de l'utilisateur serait trop lourd.
Comme je sais précisément quels morceaux de code génèrent ces bugs et dans quelles conditions, je me suis inspirée de l'idée de sylvanu pour les gérer de manière adaptée :
VB:
Sub Calculation()
Public ErrorQty As Long
Dim error_identification as Integer
On Error GoTo ErrorManagement
error_identification = 0
[...]
error_identification = 1
[Portion de code générant une erreur 1004 se résolvant en relançant le code]
error_identification = 0
error_identification = 2
[Portion de code générant une erreur 1004 dûe à un problème de donnée d'entrée]
error_identification = 0
[...]
ErrorQty = 0
Exit Sub
ErrorManagement:
Select Case Err.Number
Case 1004
If error_identification = 1 Then
ErrorQty = ErrorQty + 1
Call Calculation
ElseIf error_identification = 2 Then MsgBox ("Your input data has XX problem")
Else: MsgBox ("Error : contact developper.")
End If
End Select
End Sub