Les messages d'erreurs

On ne peut pas dire que les outils de débuggage offerts par VBscript soient des plus évolués. Pour un peu, on se croirait revenu aux temps préhistoriques du Basic. Ainsi, corriger vos erreurs en VBscript ressemble souvent au jeu des sept erreurs.

Pour ceux qui connaissent le Javascript, la gestion des erreurs de VBscript est du même niveau que celle de Javascript, donc faible et peu évoluée.

Les types d'erreurs.

Il y a 3 grandes catégories d'erreurs dans l'utilisation d'un programme VBscript :

  • les erreurs au chargement.
  • les erreurs à l'exécution
  • les erreurs de logique.

Les erreurs au chargement

Au chargement du script par le browser, l'interpréteur VBscript passe en revue les différentes erreurs qui peuvent empêcher le bon déroulement de celui-ci.
Les erreurs au chargement, nombreuses lors de l'apprentissage de VBscript, sont souvent dues à des fautes de frappe et/ou des erreurs de syntaxe.
Pour vous aider à déterminer l'erreur, VBscript affiche sa fameuse boite de message d'erreur, vous indique le problème et le texte de l'erreur. Des exemples classiques d'erreurs au chargement sont des strings absents, des minuscules au lieu de majuscules, des variables mal orthographiées.

Le gestionnaire d'erreur de VBscript bloque le script et il ne vous reste plus qu'à corriger votre erreur. Voici un exemple de script avec une erreur :

    <HTML>
    <HEAD>
    <SCRIPT LANGUAGE="vbscript">
    <!--
    Sub Bouton1_OnClick
    MsgBox "Ceci est du VBscript.
    End Sub
    -->
    </SCRIPT>
    </HEAD>
    <BODY> etc.

Vous aurez remarqué qu'il manque les guillemets de fin au string "Ceci est du VBscript".

VBscript affichera le message d'erreur suivant :

Le message d'erreur vous signale qu'à la ligne 6, il y a un string qui n'est pas terminé par des guillemets. Notez cependant que le message n'est pas toujours aussi précis et qu'il faut parfois remonter de plusieurs lignes pour trouver l'erreur effective.

Les erreurs à l'exécution

Ici votre script se charge sans problème, mais cette satanée boite de message d'erreurs apparaît lorsque l'exécution du script est demandée. Alors que les erreurs au chargement étaient surtout dues au mauvais usage de la syntaxe, les erreurs à l'exécution (runtime error) proviennent d'un mauvais usage des commandes ou des objets VBscript.
Un exemple d'erreur à l'exécution est un appel erroné à une variable ou une fonction inexistante (car il y a, par exemple, une erreur dans le nom de la variable ou de la fonction).

Les erreurs de logique

Ce sont les plus vicieuses car le "débuggeur" de VBscript ne signale bien entendu aucune erreur et votre script se déroule correctement. Hélas, à l'arrivée, le résultat ne correspond pas à celui espéré.
Il n'y a plus qu'à revoir la construction logique de votre script. Cent fois sur le métier remettez votre ouvrage...

De nombreuses erreurs de logique sont dues à des valeurs de variables incorrectes.
Voici quelques conseils :

  • Dans le cas où l'utilisateur doit entrer une valeur, celle-ci était-t-elle au bon format? N'est-il pas utile de prévoir un petit script pour vérifier le format d'entrée ?
  • On peut ajouter des points de contrôle de valeur de variable ou de passage avec l'instruction MsgBox variable ou MsgBox "Point de passage1"

Les grands classiques des erreurs.

On peut dresser une liste d'erreurs que tous les débutants (et même certains programmeurs confirmés) font ou feront tôt ou tard.

  • Soyez vigilant au nom des variables (case sensitive). Mavariable et mavariable sont deux variables distinctes. Eviter d'utiliser des noms de variables trop rapprochants.
  • Le nom de la fonction a-t-il bien la même orthographe dans la déclaration et dans l'appel. Le nom des fonctions est-il bien unique dans le script?
  • N'oubliez pas les guillemets avant et après les chaînes de caractères.
  • Avez-vous bien mis des virgules entre vos différents paramètres ou arguments?
  • Avez-vous placé votre déclaration de fin (End ...)? Avez-vous placé la déclaration de fin au bon endroit dans le cas de blocs de commandes imbriquées?
  • Assurez-vous que les noms des objets VBscript sont corrects. Le piège est que les objets ou fonctions VBscript commencent par une majuscule (MsgBox, Day, Isdate...) mais que les propriétés commencent par une minuscule (write).
  • La confusion entre = opérateur d'affectation et = opérateur de comparaison.

On Error Resume Next

L'expression On Error Resume Next, propre à VBscript, permet de poursuivre l'exécution d'un programme après une erreur à l'exécution (runtime uniquement) et empêcher ainsi qu'il soit bloqué par une fenêtre de message d'erreur. VBscript ignore l'erreur et passe à la ligne suivante.

Exemple :

<HTML>
<BODY>
<SCRIPT language="VBS">
a = 100 / 0
MsgBox a
</SCRIPT>
</BODY>
</HTML>
<HTML>
<BODY>
<SCRIPT language="VBS">
On Error Resume Next
a = 100 / 0
MsgBox a
</SCRIPT>
</BODY>
</HTML>
VBscript affiche une fenêtre d'erreur
(runtime error division par 0).
VBscript ignore l'erreur et affiche
une boite de message vide
(car a n'a pas été calculé).

Soulignons que cette astuce ne résout en rien l'erreur. Elle l'ignore simplement, ce qui désactive les messages d'erreur.

L'objet err

Avec l'objet err (objet interne de VBscript) et surtout ses propriétés, il est possible de se fabriquer un mini outil de déboggage.

err.number Contient le code d'erreur numérique lorsqu'une erreur se produit. S'il n'y a pas d'erreur, la valeur est 0. Chaque type d'erreur a son propre code.
err.description Contient une description de l'erreur correspondant au numéro d'erreur.

L'exemple précédent devient :

    <HTML>
    <BODY>
    <SCRIPT language="VBS">
    On Error Resume Next
    a = 100 / 0
    If err.number <> 0 then
    MsgBox "Erreur : " & err.number & " " & err.description
    End if
    </SCRIPT>
    </BODY>
    </HTML>

On teste s'il y a une erreur (err.number différent de 0). Avec une boite de message, on affiche le numéro de code de l'erreur (err.number) et sa description (err.description).

La boite de message affiche dans le cas présent Erreur : 11 Division by zero