Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Interception des erreurs avec Visual Basic pour Applications dans Excel pour Mac

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

La version anglaise de cet article est la suivante: 193247
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Résumé
Lorsqu'une erreur d'exécution se produit dans un Visual Basic pour Applications de Microsoftmacro, un message d'erreur s'affiche à l'écran et la macro s'arrête soitou se comporte de façon imprévisible.

Pour empêcher l'application de se bloquer ou se comporter de façon imprévisible, vous pouvezinclure le code de macro qui intercepte l'erreur et indique comment à la macro àle gérer. Le processus d'interception et de gestion d'une erreur d'exécution estappelé « interception des erreurs. » Le jeu d'instructions indiquant à l'applicationcomment gérer l'erreur est appelé « routine de gestion des erreurs » ou « erreurgestionnaire. »
Plus d'informations
Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Cela sous-entend, sans toutefois être exhaustif, un processus opérationnel pour des circonstances d'utilisation particulières. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté ainsi qu'avec les outils utilisés pour créer et déboguer les procédures. Les ingénieurs du support technique Microsoft sont en mesure de vous expliquer une procédure particulière mais ne modifieront pas le code proposé en vue d'ajouter des fonctionnalité supplémentaires ou bien de concevoir des procédures qui répondraient à vos besoin spécifiques. Pendant l'exécution de code Visual Basic, vous pouvez rencontrer plusieurs types deerreurs qui peuvent être interceptées. Vous pouvez tirer parti de récupération d'erreur dansMicrosoft Excel pour Mac en utilisant les fonctions et instructions suivantes.

On Error, instruction

L'instruction On Error provoque Visual Basic pour Applications démarrer ou arrêter l'interception des erreurs. L'instruction On Error spécifie également un ensemble d'instructions à exécuter si une erreur s'est produite.

Fonction Err

La fonction renvoie le numéro de l'erreur rencontrée.

Exemple d'utilisation de la fonction Err :
   Msgbox "The most recent error number is " & Err & _      ". Its message text is: " & Error(Err)				
Le tableau suivant contient une liste des codes d'erreur récupérable que vous pouvezrencontrer lorsque vous utilisez la fonction Err .
   Error code   Error message   ----------   -------------   3            Return without GoSub   5            Invalid procedure call   6            Overflow   7            Out of memory   9            Subscript out of range   10           This array is fixed or temporarily locked   11           Division by zero   13           Type mismatch   14           Out of string space   16           Expression too complex   17           Can't perform requested operation   18           User interrupt occurred   20           Resume without error   28           Out of stack space   35           Sub, function, or property not defined   47           Too many DLL application clients   48           Error in loading DLL   49           Bad DLL calling convention   51           Internal error   52           Bad file name or number   53           File not found   54           Bad file mode   55           File already open   57           Device I/O error   58           File already exists   59           Bad record length   61           Disk full   62           Input past end of line   63           Bad record number   67           Too many files   68           Device unavailable   70           Permission denied   71           Disk not ready   74           Can't rename with different drive   75           Path/File access error   76           Path not found   91           Object variable or With block variable not set   92           For Loop not initialized   93           Invalid pattern string   94           Invalid use of Null   298          System DLL could not be loaded   320          Can't use character device names in specified file names   321          Invalid file format   322          Can't create necessary temporary file   325          Invalid format in resource file   327          Data value named was not found   328          Illegal parameter; can't write arrays   335          Could not access system registry   336          ActiveX component not correctly registered   337          ActiveX component not found   338          ActiveX component did not correctly run   360          Object already loaded   361          Can't load or unload this object   363          Specified ActiveX control not found   364          Object was unloaded   365          Unable to unload within this context   368          The specified file is out of date. This program requires                a newer version   371          The specified object can't be used as an owner form for                Show   380          Invalid property value   381          Invalid property-array index   382          Property Set can't be executed at run time   383          Property Set can't be used with a read-only property   385          Need property-array index   387          Property Set not permitted   393          Property Get can't be executed at run time   394          Property Get can't be executed on write-only property   400          Form already displayed; can't show modally   402          Code must close topmost modal form first   419          Permission to use object denied   422          Property not found   423          Property or method not found   424          Object required   425          Invalid object use   429          ActiveX component can't create object or return                reference to this object   430          Class doesn't support OLE Automation   430          Class doesn't support Automation   432          File name or class name not found during Automation                operation   438          Object doesn't support this property or method   440          OLE Automation error   440          Automation error   442          Connection to type library or object library for remote                process has been lost   443          Automation object doesn't have a default value   445          Object doesn't support this action   446          Object doesn't support named arguments   447          Object doesn't support current locale settings   448          Named argument not found   449          Argument not optional or invalid property assignment   450          Wrong number of arguments or invalid property assignment   451          Object not a collection   452          Invalid ordinal   453          Specified DLL function not found   454          Code resource not found   455          Code resource lock error   457          This key is already associated with an element of this                collection   458          Variable uses a type not supported in Visual Basic   459          This component doesn't support events   460          Invalid Cipboard format   461          Specified format doesn't match format of data   480          Can't create AutoRedraw image   481          Invalid picture   482          Printer error   483          Printer driver does not support specified property   484          Problem getting printer information from the system.                Make sure the printer is set up correctly   485          Invalid picture type   486          Can't print form image to this type of printer   735          Can't save file to Temp directory   744          Search text not found   746          Replacements too long   31001        Out of memory   31004        No object   31018        Class is not set   31027        Unable to activate object   31032        Unable to create embedded object   31036        Error saving to file   31037        Error loading from file				

Fonction d'erreur

La fonction Error renvoie le message d'erreur qui correspond à un numéro d'erreur donné.

Exemple d'utilisation de la fonction d'erreur :
   Msgbox "The message text of the error is: " & Error(Err)				

Error, instruction

L'instruction Error simule l'occurrence d'une erreur en vous permettant d'affecter un numéro d'erreur personnalisé à la fonction Err . Ces valeurs d'erreur définis par l'utilisateur-sont des valeurs que vous définissez pour vos procédures et qui sont toujours stockées dans des variables de type de données Variant . Une utilisation courante de ce type de valeur d'erreur est dans les procédures qui acceptent plusieurs arguments et retournent une valeur. Par exemple, supposons que la valeur de retour est valide uniquement si les arguments sont définis dans une certaine plage. Votre procédure peut tester les arguments qui fournit de l'utilisateur, et si les arguments ne sont pas dans la plage acceptable, vous pouvez demander le retour de la procédure la valeur d'erreur approprié.

Erreur est un sous-type du type de données Variant et lorsque le terme « valeur d'erreur » est utilisé, cela signifie généralement qu'une variable est de type Variant , et qu'il contient une valeur de Visual Basic pour Applications est reconnue comme une erreur définie par l'utilisateur. Valeurs d'erreur sont utilisés dans une procédure pour indiquer que les conditions d'erreur ont eu lieu. Contrairement aux erreurs d'exécution normales, ces erreurs n'interrompent pas votre code, car ils sontreconnue comme variables ordinaires et pas d'erreurs. Vos procédures peuvent testerpour ces erreur valeurs et prendre les mesures correctives appropriées.

Vous pouvez également utiliser l'instruction Error pour simuler des erreurs d'exécution. Ceci est particulièrement utile lorsque vous testez vos applications, ou lorsque vous souhaitez traiter une condition particulière comme étant équivalent à un moment de l'exécutionerreur. N'importe quel Visual Basic pour Applications-erreur d'exécution peuvent être simuléen fournissant le code d'erreur pour l'erreur dans une instruction Error . Vous pouvez également utiliser l'instruction Error pour créer vos propres erreurs définies par l'utilisateur en fournissant un code d'erreur qui ne correspond pas à un Visual Basic pour Applications-erreur d'exécution. La table contenant une liste d'erreurs intégrées apparaît plus haut dans cet article (sous « fonction Err »section). À ce stade, Visual Basic pour Applications n'utilise pas tous lesles numéros disponibles pour les erreurs intégrées. Dans les versions ultérieures de VisualBase pour les Applications, les numéros internes augmenteront à mesure que plus intégrée-des erreurs sont ajoutés. Il est recommandé de commencer vos numéros d'erreurà 50 000 et votre moyen de 65 535 pour éviter d'éventuels conflits de travaill'avenir.

Exemple d'utilisation d'instruction Error pour simuler des erreurs d'exécution :
   Sub Test()      On Error Resume Next      Error 50000          'set the value of Err to 50000      If Err = 50000 Then         MsgBox "my own error occurred"      End If   End Sub				
Lors de l'exécution de la macro de Test, vous recevez une boîte de message qui contient « ma propre erreur s'est produite » en tant que le message.

CVErr, fonction

La fonction CVErr sert à créer des valeurs d'erreur. La fonction CVErr prend un argument qui doit être un entier ou être une variable qui contient un entier.
   NoRadius = CVErr(2010)   NotANumber = 2020   InvalidArgument = CVErr(NotANumber)				
Exemple d'utilisation de la fonction CVErr :
   Public NoRadius, NotANumber   Sub AreaOfCircle()      Const PI = 3.142      NoRadius = CVErr(2010)      NotANumber = CVErr(2020)      Radius = CheckData(InputBox("Enter the radius: "))      If IsError(Radius) Then         Select Case Radius            Case NoRadius               MsgBox "Error: No radius given."            Case NotANumber               MsgBox "Error: Radius is not a number."            Case Else               MsgBox "Unknown Error."         End Select      Else         MsgBox "The area of the circle is " & (PI * Radius ^ 2)      End If   End Sub   Function CheckData(TheRadius)      If Not IsNumeric(TheRadius) Then         CheckData = NotANumber      ElseIf TheRadius = 0 Then         CheckData = NoRadius      Else         CheckData = TheRadius      End If   End Function				

À l'aide des valeurs d'erreur intégrées

Il existe sept valeurs d'erreur intégrées dans Excel pour Mac. Le tableau ci-dessousAffiche le numéro d'erreur (constante), la valeur d'erreur littérale et levaleur d'erreur convertie.
Error number (Constant)   Literal error value     Converted error valuexlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)xlErrNA                     [#N/A]                  CVErr(xlErrNA)xlErrName                   [#NAME?]                CVErr(xlErrName)xlErrNull                   [#NULL!]                CVErr(xlErrNull)xlErrNum                    [#NUM!]                 CVErr(xlErrNum)xlErrRef                    [#REF!]                 CVErr(xlErrRef)xlErrValue                  [#VALUE!]CVErr(xlErrValue)				
Vous travaillez avec ces valeurs d'erreur intégrées de feuille de calcul de la même manière que vous travaillezles erreurs définies par l'utilisateur--sous forme de nombres convertis en valeurs d'erreur à l'aide dela fonction CVErr. La seule différence est que pour les erreurs de la feuille de calcul,Visual Basic pour Applications fournit les numéros d'erreur comme intégréconstantes et fournit également des valeurs d'erreur littérales. Ces éléments ne sont pasprévu pour les valeurs d'erreur définis par l'utilisateur. Les valeurs d'erreur littérale doivent êtreentre crochets comme illustré dans le tableau ci-dessus.

Exemple d'utilisation des valeurs d'erreur intégrées :
   Function Commission(SharesSold,PricePerShare)      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then         Commission = CVErr(xlErrNum)      Else         TotalSalePrice = ShareSold * PricePerShare         If TotalSalePrice <= 15000 Then            Commission = 25 + 0.03 * SharesSold         Else            Commission = 25 + 0.03 * (0.9 * SharesSold)         End If      End If   End Function				

La centralisation du Code de gestion des erreurs

Lorsque vous ajoutez le code de gestion des erreurs dans votre Visual Basic pour Applicationsmacros, vous découvrirez que les mêmes erreurs sont gérées via etde nouveau. Vous pouvez réduire la taille de votre code et l'effort requispour écrire du code en écrivant quelques procédures que votre code de gestion des erreurspeut appeler pour gérer les situations d'erreur courants.

Voici un exemple d'une procédure function qui affiche unmessage correspondant à l'erreur s'est produite, et si possible,Il permet à l'utilisateur spécifier l'action à prendre en choisissant unbouton particulier. Il puis le renvoie le numéro de code à la procédureIl appelle.
   Public Const RESUME_STATEMENT = 0   'Resume   Public Const RESUME_NEXT = 1        'Resume Next   Public Const UNRECOVERABLE = 2      'Unrecoverable error   Public Const UNRECOGNIZED = 3       'Unrecognized error   Public Const ERR_DEVICEUNAVAILABLE = 68   Public Const ERR_BADFILENAMEORNUMBER = 52   Public Const ERR_PATHDOESNOTEXIST = 76   Public Const ERR_BADFILEMODE = 54   Function FileErrors(errVal As Integer) As Integer   Dim MsgType As Integer, Msg As String, Response As Integer      MsgType = vbExalamation      Select Case errVal         Case ERR_DEVICEUNAVAILABLE     'Error #68            Msg = "That device is unavailable."            MsgType = MsgType + vbAbortRetryIgnore         Case BADFILENAMEORNUMBER      'Errors #64 & 52            Msg = "That filename is not valid."            MsgType = MsgType + vbOKCancel         Case PATHDOESNOTEXIST      'Error #76            Msg = "That path does not exist."            MsgType = MsgType + vbOKCancel         Case BADFILEMODE      'Error #54            Msg = "Can not open the file for that type of access."            MsgType = MsgType + vbOKCancel         Case Else            FileErrors = UNRECOGNIZED            Exit Function      End Select      Response = MsgBox(Msg, MsgType, "Disk Error")      Select Case Response         Case vbOK, vbRetry            FileErrors = RESUME_STATEMENT         Case vbIgnore            FileErrors = RESUME_NEXT         Case vbCancel, vbAbort            FileErrors = UNRECOVERABLE         Case Else            FileErrors = UNRECOGNIZED      End Select   End Function				

Utilisateur de gestion des interruptions

Un utilisateur peut interrompre un Visual Basic pour Applications procédure paren appuyant sur commande + point. Il est possible de désactiver les interruptions pourprocédures dans vos applications terminées. Toutefois, si vous ne désactivez pasl'utilisateur interrompt dans la procédure terminée, vous pouvez vous assurer que votreprocédure est notifié lorsqu'une interruption afin qu'il peut fermerfichiers, se déconnecter des ressources partagées ou restauration modifié variablesavant de rendre le contrôle de l'application à l'utilisateur.

Vous pouvez intercepter les interruptions de l'utilisateur dans vos procédures en définissant lePropriété EnableCancelKey sur xlErrorHandler. Lorsque cette propriété est définie, toutes les interruptions génèrent un numéro d'erreur 18, qui peut être intercepté à l'aide d'une instruction On Error run-time. Vous pouvez gérer l'erreur pour arrêter la procédure et quitter le programme. Si l'instruction Resume est utilisée pour poursuivre la procédure après une erreur d'exécution interceptée, l'interruption est ignorée.

Il est également possible d'ignorer complètement les interruptions de l'utilisateur en définissant lePropriété EnableCancelKey sur xlDisabled. Dans cet état, Microsoft Excel pour Mac ignore toutes les tentatives par l'utilisateur d'interrompre la procédure en cours d'exécution. Pour restaurer la traitement des interruptions par défaut, modifiez le paramètre de la propriété EnableCancelKey vers xlInterrupt. Pour éviter une procédure de désactiver définitivement les interruptions de l'utilisateur, Excel pour Mac restaure toujours le paramètre par défaut de la propriété EnableCancelKey vers xlInterrupt chaque fois que la procédure termine son exécution. Pour vous assurer que les interruptions sont gérées correctement dans votre code, vous devez explicitement désactiver ou intercepter les interruptions chaque fois que la procédure est exécutée. Il convient de noter ce gestionnaire d'interruption qu'une seule peut être utilisé pour chaque procédure et que le même gestionnaire est utilisé pour toutes les erreurs d'exécution rencontrées par cette procédure.

L'exemple suivant illustre une procédure qui requiert une grandepériode de temps. Si un utilisateur interrompt la procédure, une erreurest intercepté. L'interruption par l'utilisateur confirme tout d'abord que la procédure doitêtre arrêtée, puis quitte la procédure de façon ordonnée.
   Sub ProcessData()      'Set up a user interrupt trapping as a run-time error      On Error GoTo UserInterrupt      Application.EnableCancelKey = xlErrorHandler      'Start a long duration task      For x = 1 to 1000000         For y = 1 to 10         Next y      Next x      Exit Sub   UserInterrupt:      If Err = 18 Then         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then            'Continue running at the point procedure was interrupted            Resume         Else            'Handle other errors that occur            MsgBox Error(Err)         End If      End If   End Sub				
Si vous exécutez la macro ProcessData, puis appuyez rapidement sur CTRL + ATTN, unboîte de message vous demandant si vous souhaitez arrêter le traitement des enregistrements s'affiche.Si vous cliquez sur Oui, une autre boîte de message « interruption par l'utilisateur s'est produite »s'affiche. Si vous cliquez sur OK dans cette boîte de message, la fin de la macro. Si vousCliquez sur non dans la première zone de message, la macro se poursuit.

Instruction Resume

L'instruction Resume reprend l'exécution de code après une gestion des erreursfin de la routine.
XL98 XL2004 DE XL2001 XLX

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 193247 - Dernière mise à jour : 12/05/2015 09:21:13 - Révision : 2.0

Microsoft Excel 2004 for Mac, Microsoft Excel X pour Mac, Microsoft Excel 2001 pour Mac, Microsoft Excel 98 pour Macintosh

  • kbnosurvey kbarchive kbdtacode kbhowto kbmt KB193247 KbMtfr
Commentaires