XL 2016 On Error, relancer le sub une seule fois

mxdktm

XLDnaute Nouveau
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 ?

Merci d'avance pour vos idées !
 
Solution
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 :
VB:
Sub calculation()
....
....
ErrorQty = 0
End Sub
et cela devrait marcher.

Dranreb

XLDnaute Barbatruc
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.
 

mxdktm

XLDnaute Nouveau
Bonjour,
Tu n'as pas la possibilité dévaler les conditions qui provoque le bug?
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
 

Discussions similaires

Réponses
6
Affichages
8 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino