La gestion des erreurs dans Excel
Date de publication : 25/02/2007 , Date de mise à jour : 01/04/2007
Par
SilkyRoad (silkyroad.developpez.com)
Ce document décrit les types d'erreurs pouvant survenir dans Excel (formules et macros) ainsi que
les outils disponibles pour gérer ces erreurs.
Tous les exemples proposés ont été testés avec Excel2002.
I. Introduction
II. Les formules
II-A. Les types d'erreurs
II-B. L'aide à la résolution des erreurs
II-C. Les formules pour gérer les erreurs
III. Les macros
III-A. Comment gérer les erreurs
III-A-1. On Error GoTo
III-A-2. On Error GoTo 0
III-A-3. On Error Resume Next
III-B. Description de l'objet Err
III-B-1. Clear
III-B-2. Description
III-B-3. HelpFile
III-B-4. HelpContext
III-B-5. LastDllError
III-B-6. Number
III-B-7. Raise
III-B-8. Source
III-C. La fonction ERL
III-D. Divers
III-D-1. Lister les codes d'erreurs dans une feuille de calcul
III-D-2. Identifier automatiquement l'apparition des erreurs dans la feuille de calcul
III-D-3. Retrouver les cellules qui contiennent des erreurs
III-D-4. La fonction Error
III-D-5. La fonction IsError
III-D-6. La fonction CVErr
IV. Conclusion
V. Liens
VI. Téléchargement
I. Introduction
Des erreurs peuvent parfois apparaître dans les formules de calcul ou lors de
l'exécution d'une macro.
L'erreur peut être la conséquence d'une saisie erronée, mais peut parfois aussi
être inévitable:
Exemple des formules dans un tableau de bord prérempli et complété à chaque fin de mois.
Les cellules contenant des formules pour les prochains mois peuvent logiquement renvoyer
une erreur car les données ne sont pas encore renseignées.
De la même façon, une macro qui vérifie l'existence d'une feuille peut logiquement
renvoyer une erreur si l'onglet n'existe pas.
Excel dispose de plusieurs outils qui permettent d'identifier et gérer ces erreurs.
Il est intéressant de connaître la signification les codes d'erreur, de cerner la cause
et pouvoir ainsi trouver une solution corrective plus facilement. C'est l'objet de ce tutoriel.
II. Les formules
II-A. Les types d'erreurs
Un petit triangle vert, dans l'angle supérieur gauche, permet de visualiser rapidement les cellules
contenant des erreurs.
Les formules Excel renvoient des valeurs d'erreur spécifiques en fonction du problème rencontré:
#NUL! :
Survient lorsque vous spécifiez une intersection de deux zones qui, en réalité,
ne se coupent pas.
* Par exemple lors de l'utilisation d'un opérateur de plage
incorrect (=SOMME(A1 A10)). Il manque les deux-points (:) dans la
formule pour séparer
la référence de la première cellule de la référence de la dernière cellule.
#DIV/0! :
Survient lorsqu'un nombre est divisé par zéro.
#VALEUR! :
Survient lorsqu'un argument ou un élément de la formule est inapproprié.
* Vous avez attribué une plage à un opérateur ou à une fonction qui exige une seule valeur
et non pas une plage.
* Les éléments de la formule ne sont pas compatibles (Par exemple =10+"mimi" ).
* Il s'agit d'une formule matricielle qui doit être revalidée:
Dans ce cas sélectionnez la cellule, touche F2 puis appuyez sur CTRL+MAJ+ENTRÉE.
* Les dimensions de la matrice sont incorrectes.
#REF! :
Survient lorsque les coordonnées d'une cellule ne sont pas valides.
* Lors de l'utilisation d'une liaison non valide
(Vérifiez le format de la liaison ='C:\dossier\[NomClasseur.xls]NomFeuille'!$A$1).
* Lorsque la liaison vers une rubrique d'échange dynamique de données (DDE ou Dynamic Data Exchange)
n'est pas disponible.
* Après la suppression ou le collage de cellules auxquelles d'autres formules font référence.
#NOM? :
Survient lorsque l'application ne reconnaît pas le texte dans une formule.
* Vérifiez l'existence et l'orthographe des cellules et plages nommées.
* Vérifiez l'existence et l'orthographe des fonctions utilisées.
* Vérifiez la présence deux points (:) nécessaires pour référencer une plage de cellules.
* Vérifiez que l'utilisation des étiquettes est bien autorisée:
Menu Outils/Options/Sélectionnez l'onglet "Calcul"/Cochez l'option
"Accepter les étiquettes dans les formules."/Cliquez sur le bouton OK pour valider.
* Vérifiez que les textes sont encadrés par des guillemets
(Par exemple =RECHERCHE("mimi";A:A)).
* Si la formule fait référence à des valeurs ou à des cellules d'autres feuilles de calcul
ou d'autres classeurs dont le nom contient un caractère non alphabétique ou un espace,
vérifiez que vous avez bien placé une apostrophe (') de part et d'autre du nom
(='Nom Feuille'!C9).
#NOMBRE! :
Survient si formule ou une fonction contient des valeurs numériques non valides.
* Lorsqu'un nombre est trop grand ou trop petit pour être représenté dans Excel.
Les valeurs doivent être compris entre -1*10307 et 1*10307.
* Lorsqu'une fonction qui s'exécute par itération ne parvient pas à trouver un résultat.
Pour résoudre le problème, dans le menu Outils/Options/onglet "Calcul"/Cochez
l'option "Itération".
* Lorsqu'un argument est incorrect dans une fonction qui exige un argument numérique.
#N/A :
Survient lorsqu'une valeur nécessaire au bon fonctionnement de la formule est manquante.
* Si la dimension des plages de cellules n'est pas identique dans les formule matricielles:
Par exemple, =SOMMEPROD((A1:A10="dvp")*(B1:B9="number one")) renvoie une erreur.
Vous devez écrire:
=SOMMEPROD((A1:A10="dvp")*(B1:B10="number one"))
* Si des cellules référencées dans la formule contiennent des valeurs #N/A ou NA().
* Si une fonction personnalisée n'est pas disponible.
* Si un argument obligatoire est absent, ou d'un type inapproprié dans la fonction.
* Si les fonctions RECHERCHEV, RECHERCHEH ou INDEX effectuent une recherche dans une
ligne ou une colonne non triée.
Spécifiez la valeur FAUX dans le dernier argument de ces fonctions.
Elles peuvent ainsi effectuer une recherche dans une ligne ou une colonne non triée.
#### :
* Survient lorsqu'une colonne n'est pas suffisamment large pour afficher la totalité d'une
donnée numérique:
Modifiez tout simplement la largeur de la colonne afin de régler le problème.
* Survient lorsque les calculs sur les dates et les heures donnent des résultats négatifs.
Si vous utilisez le calendrier depuis 1900, les dates et les heures doivent
impérativement être positives.
1ere solution. Modifiez le format de la cellule contenant la formule:
Clic droit dans la cellule/Format de cellule/
Onglet "Nombre"/Sélectionnez la catégorie "Standard" par exemple/Cliquez sur le bouton OK
pour valider.
2eme solution. Passez en calendrier depuis 1904: Menu outils/Options/Onglet "Calcul"/Cochez
l'option "Calendrier depuis 1904".
II-B. L'aide à la résolution des erreurs
Vous pouvez utiliser l'aide Excel (F1) pour obtenir des informations très détaillées sur chaque
type d'erreur.
Depuis Excel2002, une balise active

apparaît lorsque vous
sélectionnez une cellule qui contient une erreur.
Cliquez sur ce bouton pour afficher un menu d'aide à la résolution des problèmes.

Les options du menu sont adaptées au type d'erreur:
* Description du type d'erreur.
* Afficher l'aide Excel associée à l'erreur identifiée.
* Modifier la formule.
* Evaluer la formule.
* Masquer la balise et le petit triangle vert.
* Repérer les antécédents contenant des erreurs.
* Afficher la barre d'outils d'Audit des formules.
* Afficher la boîte de dialogue d'options pour la vérification des erreurs.
La barre d'outils d'
Audit des formules propose aussi plusieurs outils pour identifier les erreurs.
(Menu Outils/Audit de formules/Afficher la barre d'outils)

Sélectionnez la cellule contenant la formule puis cliquez
sur le bouton "
Repérer les antécédents".
La commande dessine des flèches d'audit à partir des cellules qui fournissent directement des valeurs
à la formule active (antécédents).
Une flèche rouge signifie que la cellule antécédente contient une erreur.
Pour repérer les formules qui fournissent indirectement les valeurs à la formule de la cellule active,
cliquez à nouveau sur le bouton "
Repérer les antécédents".

Cette commande dessine une flèche d'audit vers la cellule
active, à partir des cellules spécifiées dans la formule, si cette dernière renvoie une erreur.

Evalue la formule étape par étape.

Identifie toutes les formules qui contiennent des valeurs non
comprises dans les limites définies par le menu Données/Validation.

Le bouton "Vérification des erreurs" reprend les
options d'aide sous forme d'une boîte de dialogue.
Les paramètres et les règles de vérification d'erreurs sont accessibles depuis
le menu Outils/Options/Onglet "Vérification des erreurs".
II-C. Les formules pour gérer les erreurs
Excel dispose aussi de fonctions spécifiques pour identifier et gérer les erreurs.
ESTERR :
Renvoie VRAI si la cellule contient une erreur (autre que #NA).
=ESTERR(A1)
ESTERREUR :
Renvoie VRAI si la cellule contient une erreur (#NA compris).
=ESTERREUR(A1)
La fonction ESTERREUR, associée à une condition SI, permet de masquer les messages erreurs.
Cette formule affiche "" dans la cellule si la division A1/A2 renvoie une erreur:
=SI(ESTERREUR(A1/A2);"";A1/A2)
Un exemple pour additionner les valeurs d'une plage, dont certaines cellules contient des erreurs.
{=SOMME(SI(ESTERREUR(A1:A5);"";A1:A5))}
Formule à valider par Ctrl+Maj+Entree.
Utilisez les formats conditionnels pour masquer toutes les valeurs d'erreur dans une feuille:
Sélectionnez toutes les cellules, puis le Menu Format/Mise en forme conditionnelle.
Dans le champ "La formule est:", saisissez =ESTERREUR(A1)
Puis Format/Police/Sélectionnez la police blanche.
Cliquez sur le bouton OK dans les différentes boîtes de dialogue.
Les valeurs d'erreur sont désormais toutes masquées.
ESTNA :
Vérifie si la cellule contient une erreur type #N/A (Renvoie VRAI ou FAUX).
=ESTNA(A1)
TYPE.ERREUR :
Renvoie une valeur en fonction du type d'erreur dans la cellule.
=TYPE.ERREUR(A1)
#NUL!: renvoie 1
#DIV/0!: renvoie 2
#VALEUR!: renvoie 3
#REF!: renvoie 4
#NOM?: renvoie 5
#NOMBRE!: renvoie 6
#N/A: renvoie 7
La fonction renvoie #N/A si la cellule ne contient pas d'erreur.
NA :
Renvoie la valeur d'erreur #N/A dans la cellule contenant cette formule.
=NA()
La fonction NA permet de marquer les cellules vides et évite d'inclure involontairement
des cellules vides dans les calculs.
Vous pouvez aussi saisir directement #N/A dans la cellule.
III. Les macros
III-A. Comment gérer les erreurs
Les erreurs d'exécution se produisent lorsqu'une instruction tente d'accomplir une opération non
valide.
Chaque erreur d'exécution provoque l'arrêt des macros. La ligne incriminée est surlignée en jaune et
un message d'alerte s'affiche à l'écran.

Le numéro d'erreur ainsi qu'une description courte s'affichent dans la boîte de dialogue.
Le bouton
Fin permet de sortir immédiatement de la procédure.
Le bouton
Débogage ferme le message d'alerte et affiche la ligne qui a déclenché l'erreur.
Le bouton
Aide ouvre l'aide associée au code d'erreur.
L'application dispose d'un gestionnaire d'erreurs pour prendre en compte ce genre de désagréments.
C'est l'instruction
On Error qui valide la gestion d'erreur. Le gestionnaire est ensuite
activé lorsque survient une erreur.
III-A-1. On Error GoTo
Effectue un branchement vers une ligne spécifiée. Par exemple
On Error goTo errorHandler
Cette instruction indique l'emplacement de la procédure qui gère les erreurs.
Lorsqu'une erreur survient, l'exécution de la macro se déplace automatiquement jusqu'à cette ligne:
errorHandler, dans l'exemple ci dessous.
On Error GoTo errorHandler doit être placé juste après
la déclaration des variables, ou au moins avant la première ligne de procédure risquant de
provoquer une erreur.
errorHandler: doit être placé en fin de procédure, éventuellement
précédé par l'instruction Exit Sub.
| Vba |
Sub laMacro()
On Error GoTo errorHandler
Exit Sub
errorHandler:
MsgBox Err.Number & vbLf & Err.Description
End Sub
|
S'il n'y a pas de problème, la macro suit son cours et se termine par
l'instruction Exit Sub.
Dans le cas contraire, la macro va directement à la
ligne errorHandler: pour gérer l'erreur.
Vous pouvez aussi ajouter l'instruction Resume si vous souhaitez reprendre
l'exécution au niveau de la ligne à l'origine de l'erreur:
| Vba |
Sub UtilisationInstructionResume()
Dim i As Integer, j As Integer
On Error GoTo ErrorHandler
j = 5 / i
MsgBox j
Exit Sub
ErrorHandler:
MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description
If i = 0 Then i = 1
Resume
End Sub
|
III-A-2. On Error GoTo 0
Invalide le gestionnaire d'erreurs précédemment créé par l'instruction On Error Goto.
Chaque erreur d'exécution provoque l'arrêt des macros, après
la ligne On Error GoTo 0.
Dans l'exemple suivant, le gestionnaire d'erreur joue son rôle jusqu'à la
ligne On Error GoTo 0. Ensuite la division par zéro fait planter la procédure.
| Vba |
Sub laMacro()
Dim x As Double
On Error GoTo errorHandler
MsgBox 5 / 2
x = 5 / 0
MsgBox x
errorHandler:
On Error GoTo 0
MsgBox 5 / 0
End Sub
|
III-A-3. On Error Resume Next
Permet de continuer la procédure
et passe directement à la ligne suivante, en cas d'erreur.
Cette instruction est pratique pour contourner une ligne pouvant poser problème.
Par exemple, lorsque vous vérifiez l'existence d'une feuille dans le classeur:
| Vba |
Sub laMacro()
Dim Ws As Worksheet
On Error Resume Next
Set Ws = ThisWorkbook.Worksheets("NomFeuille")
On Error GoTo 0
If Not Ws Is Nothing Then
MsgBox "La feuille existe dans le classeur."
Else
MsgBox "La feuille n'existe pas dans le classeur."
End If
End Sub
|
Cette instruction doit être employée avec prudence car elle masque tous les bugs qui
peuvent survenir dans la procédure.
Vous ne recevrez aucune information pour localiser une erreur qui pourrait avoir une
influence sur le résultat final de votre macro.
Utilisez On Error Resume Next seulement si vous ne pouvez pas faire autrement,
ou de façon ciblée sur une ligne précise (Comme dans l'exemple précédent).
III-B. Description de l'objet Err
L'objet Err contient des informations sur les erreurs d'exécution.
Lorsqu'une erreur se produit, les propriétés de l'objet Err stockent d'une part
des informations qui identifient l'erreur et d'autre part des informations
permettant de gérer cette erreur.
III-B-1. Clear
La méthode Clear réinitialise le contenu de l'objet Err à la suite du traitement
d'une erreur.
Les propriétés de l'objet Err sont alors remises à zéro ou remplacées par des chaînes
de longueur nulle.
La méthode Clear est appelée automatiquement dès que l'une des instructions suivantes est exécutée:
* Tout type d'instruction Resume.
* Exit Sub, Exit Function ou Exit Property.
* Toute instruction On Error.
Si la méthode Clear n'était pas utilisée dans l'exemple suivant, le message s'afficherait à chaque tour de
boucle après le déclenchement de la première erreur.
| Vba |
Sub laMacro()
Dim i As Integer
Dim Cible As Byte
On Error Resume Next
For i = 1 To 5
Randomize
Cible = Int((400 * Rnd) + 1)
If Err.Number <> 0 Then
MsgBox "Erreur"
Err.Clear
End If
Next i
End Sub
|
III-B-2. Description
La propriété Description renvoie ou définit un chaîne de caractères qui
correspond à une courte description de l'erreur.
| Vba |
Sub DescriptionErreur()
Dim Obj As OLEObject
On Error Resume Next
Set Obj = Worksheets("Feuil1").Textbox1
MsgBox Err.Description
End Sub
|
III-B-3. HelpFile
La propriété HelpFile renvoie ou définit le chemin d'accès complet à un fichier d'aide.
| Vba |
Sub FichierAideErreurs()
Dim x As Double
On Error Resume Next
x = 5 / 0
MsgBox Err.HelpFile
End Sub
|
III-B-4. HelpContext
La propriété HelpContext renvoie ou définit l'identificateur de contexte associé
à une rubrique d'un fichier d'aide.
Cette propriété permet d'afficher automatiquement la rubrique indiquée
dans la propriété HelpFile. Si les deux propriétés HelpFile et HelpContext sont vides,
la valeur de la propriété Number est vérifiée. Si la valeur de la propriété Number
correspond à la valeur d'une erreur d'exécution Visual Basic, l'identificateur de
contexte de l'aide Visual Basic pour cette erreur est utilisé. Si la valeur de la propriété
Number ne correspond pas à une erreur Visual Basic, l'écran Sommaire du fichier d'aide
Visual Basic s'affiche.
| Vba |
Dim Msg As String
Dim Cellule As Range
On Error Resume Next
Set Cellule = Cells(0, 1)
MsgBox Err.HelpContext
Msg = "Cliquez sur le bouton AIDE pour consulter la rubrique relative à cette erreur."
MsgBox Msg, vbMsgBoxHelpButton, "Erreur", Err.HelpFile, Err.HelpContext
|
III-B-5. LastDllError
La propriété
LastDllError renvoie un code d'erreur système produit lors de l'appel
d'une bibliothèque de Liaisons Dynamiques (DLL).
L'exemple suivant, adapté de
l'aide MSDN,
montre comment utiliser la
propriété
LastDllError après avoir appelé une fonction dans l'API Windows.
La procédure PrintWindowCoordinates recherche la position d'une fenêtre à partir de
son Handle, en appellant la fonction GetWindowRect.
Si vous passez un Handle
qui n'est pas valide, une erreur se produit, laissant apparaître le numéro d'erreur
via la propriété
LastDllError. La fonction LastDLLErrorDescription permet de retrouver la
description associée à la valeur d'erreur.
| Vba |
Option Explicit
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" _
(ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Declare Function GetWindowRect Lib "user32" _
(ByVal Hwnd As Integer, ByRef lpRect As RECT) As Integer
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub PrintWindowCoordinates(ByVal Hwnd As Integer)
Dim rectWindow As RECT
If GetWindowRect(Hwnd, rectWindow) = 0 Then
MsgBox "Valeur d'erreur: " & Err.LastDLLError & vbCrLf & _
LastDLLErrorDescription(Err.LastDLLError)
Else
Debug.Print (rectWindow.Bottom)
Debug.Print (rectWindow.Left)
Debug.Print (rectWindow.Right)
Debug.Print (rectWindow.Top)
End If
End Sub
Public Function LastDLLErrorDescription(LastDLLError As Long) As String
Dim strBuffer As String
Dim LenBuff As Long
Dim cRes As Long
LenBuff = 256
strBuffer = Space$(LenBuff)
cRes = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _
0&, LastDLLError, 0&, strBuffer, LenBuff, 0&)
If cRes = 0 Then
strBuffer = "FormatMessage API execution Error. Couldn't fetch error description."
Else
strBuffer = Left$(strBuffer, cRes - 2)
End If
LastDLLErrorDescription = strBuffer
End Function
Sub Test()
PrintWindowCoordinates 1
End Sub
|
III-B-6. Number
La propriété Number renvoie ou définit une valeur numérique spécifique en
fonction du type d'erreur.
Il s'agit de la propriété par défaut de l'objet Err.
Consultez le chapitre III-D-1 si vous souhaitez lister les codes d'erreurs définis
dans Excel.
L'exemple suivant lit le commentaire de la cellule A1. La procédure renvoie une
erreur 91 si le commentaire n'existe pas.
| Vba |
Sub lireCommentaire()
Dim Cm As Comment
On Error GoTo Fin
Set Cm = Range("A1").Comment
MsgBox Cm.Text
Exit Sub
Fin:
If Err.Number = 91 Then MsgBox "Il n'y a pas de commentaire dans la cellule."
End Sub
|
III-B-7. Raise
La méthode
Raise est utilisée pour générer une erreur d'exécution dans la macro.
La syntaxe:
Err.Raise Number, Source, Description, HelpFile, HelpContext
Number:
Identifie la nature de l'erreur.
La plage de 0 à 512 est réservée aux erreurs système. La plage de 513 à 65535 est disponible
pour les erreurs définies par l'utilisateur.
Source:
(Facultatif) Nomme l'objet ou l'application à l'origine de l'erreur.
Description:
(Facultatif) Spécifie la chaîne de caractères qui décrit l'erreur.
HelpFile:
(Facultatif) Définit le chemin d'accès complet au fichier d'aide associé à cette erreur.
Si ce chemin n'est pas indiqué, la procédure adopte le fichier d'aide de Visual Basic.
Consultez le tutoriel de
ThierryAIM pour
créer vos fichiers d'aide .chm.
HelpContext:
(Facultatif) Désigne l'identificateur de contexte contenu dans le fichier d'aide.
Cet exemple vérifie le contenu d'un InputBox et crée une gestion d'erreur personnalisée
en fonction des données saisies:
| Vba |
Sub Macro_TestRaise()
Dim Resultat As Variant
On Error GoTo Fin
Resultat = InputBox("Saisissez une valeur entre 0 et 9:", "Le titre", 0)
If Resultat = "" Then Exit Sub
If Not IsNumeric(Resultat) Then _
Err.Raise 5010, , "Type de donnée non compatible."
If Len(Resultat) > 1 Then _
Err.Raise 5020, , "La valeur doit être comprise entre 0 et 9", _
"C:\MonFichierAide.chm", 1000028
Exit Sub
Fin:
MsgBox "Erreur: " & Err.Number & vbCrLf & _
Err.Description, vbMsgBoxHelpButton, , Err.HelpFile, Err.HelpContext
End Sub
|
III-B-8. Source
La propriété Source renvoie ou définit une chaîne de caractères indiquant le nom
de l'objet ou de l'application qui a généré l'erreur.
III-C. La fonction ERL
La fonction ERL permet de récupérer le numéro de ligne qui a provoqué une erreur
dans la macro.
Vous devez avoir préalablement numéroté les lignes de procédure dans l'éditeur de macros.
| Vba |
Sub laProcedure()
4 Dim x As Integer
5 x = 0
6 On Error GoTo errHandler
8 x = 5 / 0
10 Exit Sub
11 errHandler:
12 MsgBox "Une erreur est survenue, Ligne: " & Erl() & _
vbCrLf & "Numéro d'erreur: " & Err.Number & vbCrLf & Err.Description
14 End Sub
|
Si la ligne
x = 5 / 0 n'est pas numérotée, la fonction
ERL
renvoie le numéro de la derniere ligne précédant l'erreur (6 dans l'exemple précédent).
ERL renvoie 0 s'il n'y a pas d'erreur dans la procedure.
ERL renvoie 0 si aucune ligne n'est numérotée dans la macro.
Il existe des outils gratuits, tel que
MZ-Tools,
qui vous aideront à numéroter les lignes de macros très facilement.
III-D. Divers
III-D-1. Lister les codes d'erreurs dans une feuille de calcul
Les codes d'erreurs récupérables sont stockés dans le fichier d'aide VbLR6.chm (Excel2002).
Cette macro liste dans une feuille de calcul les numéros d'erreur, les descriptions,
Les chemins du fichier d'aide et leur index.
| Vba |
Sub ListeErreur()
Dim Cible As Integer
Dim I As Integer, j As Integer
j = 1
On Error Resume Next
For I = 1 To 800
Cible = I
Err.Clear
Err.Raise Cible
j = j + 1
Cells(j, 1) = Err.Number
Cells(j, 2) = Err.Description
Cells(j, 3) = Err.HelpFile
Cells(j, 4) = Err.HelpContext
Next I
End Sub
|
Vous pouvez ensuite placer cette deuxième macro dans
le
module objet de
la feuille de calcul qui contient la liste les codes d'erreurs précédemment créée.
| Vba |
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim Fso As Object, oFichier As Object
Dim Ligne As Integer
Dim Fichier As String
Ligne = ActiveCell.Row
Set Fso = CreateObject("Scripting.FileSystemObject")
Set oFichier = Fso.GetFile(Cells(Ligne, 3))
Fichier = Fso.GetFileName(oFichier)
Application.Help Fichier, Cells(Ligne, 4)
End Sub
|
Désormais, la rubrique d'aide s'affiche si vous double cliquez sur une des lignes contenant
les codes d'erreur.
III-D-2. Identifier automatiquement l'apparition des erreurs dans la feuille de calcul
Cette procédure évènementielle Worksheet_Calculate
affiche un message d'alerte dès qu'une formule provoque une erreur.
Une option permet d'ouvrir l'aide Excel.
| Vba |
Option Explicit
Private Sub Worksheet_Calculate()
Dim Valeur As Range
Dim Resultat As String, Message As String
For Each Valeur In Worksheets("Feuil1").UsedRange
If WorksheetFunction.IsError(Valeur) = True Then
Valeur.ShowErrors
Select Case Valeur
Case CVErr(xlErrDiv0)
Resultat = "#DIV/0!"
Case CVErr(xlErrNA)
Resultat = "#N/A"
Case CVErr(xlErrName)
Resultat = "#NOM?"
Case CVErr(xlErrNull)
Resultat = "#NULL!"
Case CVErr(xlErrNum)
Resultat = "#NOMBRE!"
Case CVErr(xlErrRef)
Resultat = "#REF!"
Case CVErr(xlErrValue)
Resultat = "#VALEUR!"
End Select
MsgBox "Il y a une erreur de type " & Resultat _
& " dans la formule de la cellule " & Valeur.Address
End If
Next
Message = MsgBox("Voulez vous ouvir l'aide en ligne Excel?", _
vbYesNo, "Informations complementaires sur les types d'erreur")
If Message = vbYes Then Application.Help "XLMAIN10.chm", 60309
End Sub
|
Placez cette macro dans un module standard pour supprimer les flèches d'audit:
(Ou Menu Outils/Audit de formules/Supprimer toutes les flèches)
| Vba |
Sub effacerFlechesAudit()
Worksheets("Feuil1").ClearArrows
End Sub
|
III-D-3. Retrouver les cellules qui contiennent des erreurs
La macro suivante retrouve les cellules qui contiennent des erreurs dans la plage
spécifiée.
| Vba |
Sub identifierCellulesContenantErreurs()
Dim Plage As Range, Cible As Range
Set Plage = Range("A1:A20")
On Error Resume Next
Set Cible = Plage.SpecialCells(xlCellTypeFormulas, xlErrors)
If Not Cible Is Nothing Then MsgBox Cible.Address(0, 0)
End Sub
|
III-D-4. La fonction Error
La fonction Error renvoie le message correspondant au numéro
d'erreur spécifié.
Si le numéro d'erreur n'est pas valide, une erreur se produit. Si le numéro d'erreur
est omis, le message correspondant à l'erreur d'exécution la plus récente est renvoyé.
Si aucune erreur d'exécution n'est survenue, ou si la valeur est égale à 0, la fonction
Error renvoie une chaîne de longueur nulle ("").
La chaîne renvoyée par la fonction Error correspond à la propriété "Description"
de l'objet Err.
III-D-5. La fonction IsError
La fonction IsError renvoie une valeur de type Boolean qui indique si l'expression
spécifiée est une valeur d'erreur.
| Vba |
Sub MessageSiErreurFormuleDansCellule()
If IsError(Range("A1")) = True Then _
MsgBox "Il y a une erreur dans la cellule."
End Sub
|
III-D-6. La fonction CVErr
La fonction CVErr renvoie une donnée de type Variant et de sous-type Error contenant
un numéro d'erreur spécifié par l'utilisateur.
Cet exemple supprime la ligne complète si une cellule de la colonne A contient une erreur
type #DIV/0!.
| Vba |
Sub suppressionLigne_SiErreur_Div0()
Dim x As Integer
For x = 20 To 1 Step -1
If WorksheetFunction.IsError(Range("A" & x)) = True Then
If CVErr(xlErrDiv0) = Range("A" & x) Then _
Rows(x).EntireRow.Delete
End If
Next x
End Sub
|
IV. Conclusion
Il est particulièrement interessant de prendre en compte les erreurs lorsque vous devez gérer
et anticiper toutes les manipulations de l'utilisateur final. Dans ce cas,
une réflexion doit être menée en amont pour identifier les problèmes qui
pourraient survenir. Faites tester le classeur par plusieurs utilisateurs (de préférence
non spécialistes) et possédant des configurations différentes afin de valider votre gestionnaire
d'erreur.
V. Liens
VI. Téléchargement


Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.