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 If

Flag 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 If

Si 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 Sub

A voir...

@ bientôt

LouReeD

Rechercher des sujets similaires à "detection erreur"