Détection d'erreur
Bonjour,
J'ai crée un programme qui fonctionne au vu du cahier des charges. Il y a juste un problème que j'ai identifié dans la gestion d'erreur. Voici deux extraits du code VBA :
Call Flag
If Flag_Error = False Then
Call CopyDataFromIFileToOFile
Call CreationDataOSheet
Call Initialization
Call Decision
Call Acts
Call Total
Call ActsCasings
Call GraphicsDecisions
Call GraphicsActsObjects
Workbooks(Inputfilename).Close
Workbooks(Outputfilename).SaveAs pathOF
Workbooks(Outputfilename).Close
Else
Exit Sub
End IfFlag est la procédure dans laquelle se trouve la vérification de l'absence d'erreurs. Flag_Error est un drapeau changeant d'état (1 ou 0) selon qu'une erreur est détectée ou pas.
Dans la procédure Flag, il y a ceci entre autres :
Workbooks.Open (pathIF)
Set Check_Name = Workbooks(Inputfilename).Worksheets(InputSheetName)
If Check_Name Is Nothing Then
MsgBox "La feuille du classeur d'entrée n'existe pas.", vbCritical, InputSheetName
Flag_Error = True
Workbooks(Inputfilename).Close
Exit Sub
Else
Flag_Error = False
End IfSi j'exécute l'appli. et que je saisie une donnée sans une erreur glissée volontairement, alors il n'y a pas de message. Ce qui est normal. Ca marche bien.
Si j'exécute l'appli. et que je saisie une donnée avec une erreur glissée volontairement, alors le message censé apparaître (voir ci-dessus) n'apparaît pas. A la place, c'est un message de VBA : Erreur d'exécution 9 : l'indice n'appartient pas à la sélection.
Si j'exécute l'appli. une troisième fois et que je saisie une donnée avec une erreur glissée volontairement (la même par exemple), alors le message censé apparaître apparaît. Ca marche bien.
Je ne comprends pas ce comportement. Dans les 1èr et 3ème cas, la procédure est parcourue et l'erreur spécifique est détectée. C'est comme si dans le 2ème cas, elle ne l'était pas car dans le blocage il indique que Flag_Error=False, ce qui est faux puisqu'il y a erreur.
Bonjour,
Ce n'est pas facile de vous donner une réponse adéquate sans voir le fichier où le code complet et la déclaration des variables
je me pose ces questions :
- votre déclaration de variable Dim Flag_Error est placée où ?
- le code s'arrête sur quelle ligne lorsque vous avez l'erreur
Bonsoir,
vous avez également la touche [F8] pour suivre ce que fait VBA pas à pas...
Et pourquoi créer une procédure de gestion d'erreur alors que VBA le fait très bien ?
Sub Test()
Workbooks.Open (pathIF)
On Error GoTo SheetName
Set Check_Name = Workbooks(Inputfilename).Worksheets(InputSheetName)
On Error Resume Next
' le code ci dessous ne tournera que s'il n'y a pas d'erreur sur le nom de la feuille
' on peut ajouter une deuxième gestion d'erreur
On Error GoTo SuitePRG
Call CopyDataFromIFileToOFile
Call CreationDataOSheet
Call Initialization
Call Decision
Call Acts
Call Total
Call ActsCasings
Call GraphicsDecisions
Call GraphicsActsObjects
Workbooks(Inputfilename).Close
Workbooks(Outputfilename).SaveAs pathOF
Workbooks(Outputfilename).Close
On Error Resume Next
' tout c'est bien passé, on quitte la sub
Exit Sub
SheetName:
MsgBox "La feuille du classeur d'entrée n'existe pas.", vbCritical, InputSheetName
Exit Sub
SuiteRPG:
MsgBox "Une erreur s'est produite dans la ""suite"" du programme.", vbCritical
Exit Sub
End SubA voir...
@ bientôt
LouReeD