Table of contents
XML
TOC
Réduire la table des matières
Développer la table des matières

Erreurs

office 365 dev account|Dernière mise à jour: 04/10/2017
|
1 Contributeur

Erreurs

Lors de la programmation d'une application, vous devez prendre en considération les conséquences d'une erreur. Les erreurs peuvent se produire pour deux raisons majeures. Tout d'abord, l'existence d'une condition particulière au moment de l'exécution de l'application peut provoquer l'échec du code, alors que celui-ci est valide par ailleurs. Par exemple, si votre code tente d'ouvrir une table supprimée par l'utilisateur, une erreur se produit. Deuxième hypothèse : votre code contient peut-être une fonction logique incorrecte qui l'empêche d'exécuter l'action prévue. Une erreur se produit, par exemple, si votre code essaie de diviser une valeur par zéro.

Si vous n'avez pas mis en œuvre de sous-programme de gestion des erreurs, Visual Basic interrompt l'exécution et affiche un message d'erreur lorsqu'une erreur survient dans votre code. L'utilisateur de l'application risque de s'en trouver décontenancé et gêné dans son travail. Vous pouvez éviter bon nombre de problèmes en introduisant dans votre code des routines spécifiques de gestion des erreurs capables de traiter toute erreur susceptible de se produire.

Lors de l'ajout d'une routine de traitement des erreurs à une procédure, envisagez les différentes possibilités de reprise de l'exécution par la procédure en cas d'erreur. Pour que l'exécution soit prise en charge par un sous-programme de traitement des erreurs, vous devez tout d'abord activer un tel sous-programme en intégrant, sous une forme ou une autre, l'instruction On Error à la procédure. L'instruction On Error redirige l'exécution en cas d'erreur. En l'absence d'instruction On Error, Visual Basic interrompt l'exécution et affiche un message d'erreur dès qu'une erreur se produit.

Lorsqu'une erreur se produit pendant une procédure avec un gestionnaire d'erreurs activé, Visual Basic n'affiche pas le message d'erreur normal, mais redirige l'exécution vers le gestionnaire d'erreurs, s'il existe. Lorsque l'exécution passe à un gestionnaire d'erreurs activé, celui-ci s'active. Au sein du gestionnaire d'erreurs, vous pouvez déterminer le type d'erreur qui s'est produit et le gérer de la manière choisie. Access propose trois objets qui contiennent des informations sur les erreurs qui se sont produites : l'objet ADO Error, l'objet Visual Basic Err et l'objet DAO Error.

Prise en charge de l'exécution lors de la production d'une erreur

Le sous-programme de gestion des erreurs spécifie ce qu'il advient au sein d'une procédure lorsqu'une erreur se produit. Par exemple, vous pouvez faire en sorte qu'une procédure s'arrête en présence d'un certain type d'erreur, ou corriger l'erreur et poursuivre l'exécution. Les instructions On Error et Resume déterminent la suite de l'exécution en cas d'erreur.

Instruction On Error

L'instruction On Error active ou désactive une routine de traitement des erreurs. Lorsqu'un programme de gestion des erreurs est activé, il prend l'exécution en charge dès qu'une erreur survient.

L'instruction On Error existe sous trois formes : On Error GoTolabel , On Error GoTo 0 et On Error Resume Next. L'instruction On Error GoTolabel active une routine de gestion des erreurs, à partir de la ligne sur laquelle se trouve l'instruction. Activez la routine de gestion des erreurs avant la première ligne sur laquelle une erreur est susceptible de se produire. Si une erreur survient alors que le gestionnaire d'erreurs est actif, l'exécution se poursuit à partir de la ligne spécifiée par l'argument label .

La ligne spécifiée par l'argument label doit constituer le début de la routine de gestion des erreurs. La procédure qui suit, par exemple, spécifie qu'en cas d'erreur, l'exécution saute à la ligne libellée :

Function MayCauseAnError()
    ' Enable error handler.
    On Error GoTo Error_MayCauseAnError
    .            ' Include code here that may generate error.
    .
    .

Error_MayCauseAnError:
    .            ' Include code here to handle error.
    .
    .
End Function

L'instruction On Error GoTo 0 désactive le traitement des erreurs au sein d'une procédure. Elle ne définit pas la ligne 0 en tant que début du code de traitement des erreurs, même si la procédure contient une ligne portant le numéro 0. Si votre code ne comporte pas d'instruction On Error GoTo 0, le sous-programme de gestion des erreurs est automatiquement désactivé à l'issue de la procédure. L'instruction On Error GoTo 0 réinitialise les propriétés de l'objet Err, tout comme la méthode Clear de l'objet Err.

L'instruction On Error Resume Next ignore la ligne responsable de l'erreur et poursuit l'exécution à partir de la ligne suivante. L'exécution n'est donc pas interrompue. Vous pouvez utiliser l'instruction On Error Resume Next pour vérifier les propriétés de l'objet Err immédiatement après une ligne sur laquelle vous anticipez une erreur, et corriger l'erreur au sein de la procédure plutôt que dans une routine de traitement des erreurs.

Instruction Resume

L'instruction Resume dans le sous-programme de gestion des erreurs permet de reprendre l'exécution dans la procédure principale. Vous pouvez inclure une instruction Resume à l'intérieur d'une routine de gestion des erreurs pour que l'exécution se poursuive à partir d'un point spécifique d'une procédure. Toutefois, l'instruction Resume n'est pas absolument nécessaire ; vous pouvez aussi mettre un terme à la procédure après le sous-programme de traitement des erreurs.

L'instruction Resume existe sous trois formes. L'instruction Resume ou Resume 0 reprend l'exécution à partir de la ligne sur laquelle l'erreur s'est produite ; l'instruction Resume Next la reprend à la ligne suivante ; enfin, l'instruction Resumelabel la reprend à la ligne spécifiée par l'argument label . L'argument label doit indiquer un libellé ou un numéro de ligne.

L'instruction Resume ou Resume 0 s'utilise généralement lorsque l'utilisateur doit apporter une correction. Par exemple, si vous demandez à l'utilisateur de spécifier le nom de la table à ouvrir, et si l'utilisateur indique le nom d'une table qui n'existe pas, vous pouvez interroger une nouvelle fois l'utilisateur et reprendre l'exécution à partir de l'instruction ayant généré l'erreur.

Utilisez l'instruction Resume Next si votre code corrige l'erreur au sein d'un gestionnaire d'erreurs et si vous voulez poursuivre l'exécution en ignorant la ligne responsable de l'erreur. Utilisez l'instruction Resumelabel pour poursuivre l'exécution à partir d'un autre endroit de la procédure, spécifié par l'argument label . Vous pouvez, par exemple, reprendre l'exécution au niveau d'une routine de sortie, comme indiqué dans la section suivante.

Sortie d'une procédure

Lorsque vous incluez une routine de traitement des erreurs à une procédure, incluez également une routine de sortie, pour faire en sorte que la routine de traitement des erreurs ne s'exécute que si une erreur se produit. Vous pouvez spécifier une routine de sortie en utilisant un libellé de ligne, tout comme vous le faites pour une routine de traitement des erreurs.

Ainsi, vous pouvez ajouter une routine de sortie à l'exemple de la section précédente. Si aucune erreur ne se produit, la routine de sortie s'exécute après la procédure principale. Si une erreur se produit, l'exécution reprend au niveau de la routine de sortie après l'exécution du code contenu dans la routine de traitement des erreurs. La routine de sortie comporte une instruction Exit.

Function MayCauseAnError()
    ' Enable error handler.
    On Error GoTo Error_MayCauseAnError
    .            ' Include code that may generate error.
    .
    .

Exit_MayCauseAnError:
    Exit Function

Error_MayCauseAnError:
    .            ' Include code to handle error.
    .
    .
    ' Resume execution with exit routine to exit function.
    Resume Exit_MayCauseAnError
End Function

Erreurs

Lorsqu'une erreur se produit dans une procédure imbriquée pour laquelle aucune routine de traitement des erreurs n'est activée, Visual Basic recherche, dans la liste d'appels qui précède, la présence éventuelle d'une routine de gestion des erreurs active dans une autre procédure, au lieu d'interrompre l'exécution. Votre code a ainsi la possibilité de corriger l'erreur à partir d'une autre procédure. Supposez par exemple que la Procédure A appelle la Procédure B, qui elle-même appelle la Procédure C. Si une erreur se produit dans la Procédure C alors qu'aucune routine de traitement des erreurs n'est activée, Visual Basic en recherche une dans la Procédure B, puis dans la Procédure A. S'il en trouve une, l'exécution est prise en charge par cette routine. S'il n'en trouve aucune, l'exécution est interrompue et un message d'erreur s'affiche.

Visual Basic recherche également une routine de traitement des erreurs activée dans la liste d'appels qui précède lorsqu'une erreur se produit à l'intérieur d'une routine de traitement des erreurs active. Vous pouvez forcer Visual Basic à effectuer cette recherche dans la liste d'appels en générant une erreur à l'intérieur d'une routine de traitement des erreurs active à l'aide de la méthode Raise de l'objet Err. Cette technique se révèle très utile pour traiter les erreurs imprévues au sein d'une routine de gestion des erreurs. Si une erreur inattendue se produit et si vous la générez à nouveau à l'intérieur de la routine de traitement des erreurs, la liste des appels qui précède est passée en revue pour trouver un autre sous-programme de gestion des erreurs, que vous pouvez alors utiliser pour corriger l'erreur.

Supposez par exemple qu'une routine de traitement des erreurs soit activée dans la Procédure C, mais qu'elle ne soit pas capable de corriger l'erreur générée. Lorsque le programme de traitement des erreurs a passé en revue toutes les erreurs que vous aviez anticipées, il se peut qu'il génère à nouveau l'erreur initiale. La liste d'appels est alors parcourue, et l'exécution reprend au niveau de la routine de traitement des erreurs de la Procédure B, si elle existe, lui donnant ainsi la possibilité de corriger l'erreur. Si aucune routine de traitement des erreurs ne se trouve dans la Procédure B, ou si elle ne parvient pas à corriger l'erreur et la génère à nouveau, l'exécution est prise en charge par le programme de gestion des erreurs de la Procédure A, en supposant qu'il existe.

Pour illustrer ce concept autrement, supposez que vous utilisez une procédure imbriquée incluant une routine de gestion des erreurs pour une erreur d'incompatibilité de type, erreur que vous avez anticipée. À un certain stade de la Procédure C, une erreur de type division-par-zéro, que vous n'aviez pas anticipée, se produit. Si vous avez inclus une instruction relative à la reproduction de l'erreur initiale, la liste des appels est passée en revue, et un autre programme de traitement des erreurs activé, le cas échéant, reprend l'exécution. Si vous avez corrigé une erreur de type division-par-zéro dans une autre procédure de la liste d'appels, l'erreur est corrigée. Si votre code ne génère pas l'erreur une nouvelle fois, la procédure se poursuit sans corriger l'erreur de type division-par-zéro, ce qui risque d'entraîner la production d'autres erreurs au sein des procédures imbriquées.

En résumé, Visual Basic recherche un sous-programme de traitement des erreurs activé dans la liste d'appels si :

  • Une erreur se produit dans une procédure n'incluant pas de routine de traitement des erreurs activée.

  • Une erreur se produit à l'intérieur d'un sous-programme de traitement des erreurs actif. Si vous utilisez la méthode Raise de l'objet Err pour générer une erreur, vous pouvez forcer Visual Basic à rechercher une routine de traitement des erreurs activée dans la liste d'appels.

Obtention d'informations relatives aux erreurs

Lorsque l'exécution est prise en charge par la routine de traitement des erreurs, le code doit déterminer le type de l'erreur qui s'est produite et corriger cette erreur. Visual Basic et Access fournissent plusieurs éléments de langage que vous pouvez utiliser pour obtenir des informations relatives à une erreur spécifique. Chacun de ces éléments correspond à un type d'erreur différent. Comme des erreurs sont susceptibles de survenir à différents endroits de votre application, vous devez déterminer l'élément qui sera utilisé dans votre code en fonction des erreurs prévues.

Les éléments de langage disponibles pour le traitement des erreurs sont :

Objet Err

L'objet Err est fourni par Visual Basic. Lorsqu'une erreur se produit dans Visual Basic, les informations relatives à cette erreur sont stockées dans l'objet Err. L'objet Err conserve les informations se rapportant à une seule erreur à la fois. Lorsqu'une nouvelle erreur est générée, l'objet Err est mis à jour à partir des informations relatives à cette dernière erreur.

Pour obtenir des informations sur une erreur spécifique, vous pouvez utiliser les propriétés et méthodes de l'objet Err. La propriété Number est la propriété par défaut de l'objet Err; elle renvoie le numéro identifiant l'erreur qui s'est produite. La propriété Description de l'objet Err renvoie la chaîne descriptive associée à une erreur Visual Basic. La méthode Clear efface les informations relatives à l'erreur actuelle qui sont contenues dans l'objet Err. La méthode Raise génère une erreur spécifique et définit les propriétés de l'objet Err en fonction des informations relatives à cette erreur.

L'exemple ci-dessous indique comment utiliser l'objet Err dans une procédure susceptible de provoquer une erreur d'incompatibilité de type :

Function MayCauseAnError()
    ' Declare constant to represent likely error.
    Const conTypeMismatch As Integer = 13

    On Error GoTo Error_MayCauseAnError
        .            ' Include code here that may generate error.
        .
        .

Exit_MayCauseAnError:
    Exit Function

Error_MayCauseAnError:
    ' Check Err object properties.
    If Err = conTypeMismatch Then
        .            ' Include code to handle error.
        .
        .
    Else
        ' Regenerate original error.
        Dim intErrNum As Integer
        intErrNum = Err
        Err.Clear
        Err.Raise intErrNum
    End If
    ' Resume execution with exit routine to exit function.
    Resume Exit_MayCauseAnError
End Function

Notez que dans l'exemple qui précède, la méthode Raise est utilisée pour générer à nouveau l'erreur initiale. Si une erreur autre qu'une erreur d'incompatibilité de type se produit, la liste d'appels est passée en revue et l'exécution est prise en charge par un autre sous-programme de traitement des erreurs activé, s'il existe.

L'objet Err vous fournit toutes les informations dont vous pouvez avoir besoin en ce qui concerne les erreurs Visual Basic. Il ne vous fournit cependant pas d'informations complètes sur les erreurs Access ni sur celles du moteur de base de données Access. Access et les objets d'accès aux données (DAO) proposent des éléments de langage supplémentaires pour vous aider à résoudre ces erreurs.

Erreurs

Erreurs

Erreurs

Méthode AccessError

Vous pouvez utiliser la méthode Raise de l'objet Err pour générer une erreur Visual Basic qui ne s'est pas réellement produite et déterminer la chaîne descriptive associée à cette erreur. Vous ne pouvez cependant pas utiliser la méthode Raise pour générer une erreur Access, une erreur ADO ou une erreur DAO. Pour identifier la chaîne descriptive associée à une erreur Access, DAO ou DAO qui ne s'est pas réellement produite, utilisez la méthode AccessError.

Evénement Error

Vous pouvez utiliser l'événement Error pour identifier les erreurs qui se produisent dans un formulaire ou un état Access. Si, par exemple, un utilisateur essaie de taper du texte dans un champ de type Date/Heure, l'événement Error se produit. Si vous ajoutez une procédure événementielle Error à un formulaire Employees, puis essayez de taper du texte dans un champ HireDate, la procédure événementielle Error s'exécute.

La procédure événementielle Error utilise un argument de type entier, DataErr. Lorsqu'une procédure événementielle Error se produit, l'argument DataErr contient le numéro de l'erreur Access qui s'est produite. La seule façon de déterminer le numéro de l'erreur qui s'est produite consiste à vérifier la valeur de l'argument DataErr à l'intérieur de la procédure événementielle. Les informations relatives à l'erreur ne sont pas répercutées dans l'objet Err après la production de l'événement Error. Vous pouvez utiliser la valeur de l'argument DataErr avec la méthode AccessError pour déterminer le numéro de l'erreur et sa chaîne descriptive.

Remarque L'instruction Error et la fonction Error sont uniquement fournies pour des raisons de compatibilité avec les versions antérieures. Lors de l'élaboration de code nouveau, utilisez les objets Err et Error, la fonction AccessError et l'événement Error pour obtenir les informations relatives à une erreur.

© 2018 Microsoft