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. ExemplePrivate 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'histoireLa 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 |