Question 195

Comment connaitre le numéro de ligne où se produit une erreur ?

Dans certains cas, localiser avec précision la source d'une erreur d'exécution dans une fonction peut s'avérer difficile. Il serait alors bien utile de connaître la ligne qui provoque l'erreur.

Ceci n'est officiellement pas possible en VB... Et pourtant, il existe un moyen très simple qui utilise la fonction non documentée Erl(). Cette fonction renvoie le numéro de ligne (ou l'étiquette) de la ligne sur laquelle une erreur a été détectée.

L'utilisation est très simple : commencer chaque ligne de la section de code à surveiller par une étiquette (l'usage est d'utiliser des nombres croissants numérotés de 10 en 10) puis utiliser la fonction Erl() dans la section de traitement d'erreur.

Exemple

Private Sub Dummy()

    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    
    On Error GoTo DummyErrorHandling
    
10:    a = 42
20:    b = 0
30:    c = a / b
40:    MsgBox c

DummyEnd:
    Exit Sub
    
DummyErrorHandling:
    MsgBox "Error detected line " & Erl
    Resume DummyEnd
End Sub

Note : Après plus de 15 ans d'absence, Erl revient dans VB2005, comme propriété de l'objet Err.

Un peu d'histoire

La fonction Erl() est une survivance des premiers Basic. Dans les premières versions de Basic, les lignes devaient obligatoirement commencer par un numéro de ligne. Ainsi, Erl() et Err() étaient utilisées pour le débuggage et Erl() affichait tout naturellement le numéro de ligne ou l'erreur avait été détectée. La fonction Erl() n'existe officiellement plus depuis Visual Basic 3; les développeurs de Microsoft ont cependant gardé cette fonction, sans toutefois la documenter.

Voici pour l'exemple un vieux programme Basic :

10 REM UN VIEUX PROGRAMME BASIC
20 REM
30 ON ERROR GOTO 1000
40 PRINT "CALCUL DE A/B"
50 INPUT "ENTRER A ";A
60 INPUT "ENTRER B ";B
70 C = A / B
80 PRINT A; "/"; B; " = " ; C
90 END

1000 REM TRAITEMENT DES ERREURS
1010 PRINT "ERREUR LIGNE "; ERL
1020 PRINT "ERREUR: " ; ERR
1030 END

Pour l'anecdote, il existe d'autres fonctions cachées dans VB : MacID, MacScript, VarPtr, ObjPtr et StrPtr. On peut faire apparaître ces fonctions en affichant l' Object Browser dans l'IDE (F2). Cliquer sur "Show Hidden Members" dans le menu contextuel du panneau principal, accessible par un clic droit. Les fonctions cachées apparaissent en grisé.

Pour aller plus loin

Date de publication : 11 septembre 2008
Dernière modification : 11 septembre 2008
Rubriques : Divers, Erreurs & problèmes
Mots-clés : erreur, error, numéro, ligne, on error, err, erl