[ON ERROR] afficher l'erreur et arreter le script

Résolu
rastamath69 Messages postés 45 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 9 novembre 2009 - 6 nov. 2006 à 11:38
Cramfr Messages postés 160 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 juillet 2008 - 7 nov. 2006 à 16:24
Bonjour,

j'ai fait un script VBS qui marche, et maintenant j'aimerai arriver à gérer les erreurs.

J'ai fait pas mal de recherche et déjà je me suis rendu compte que "Goto" ne marchait pas en VBS. dc comment faire pr gérer les erreurs???

en gros mon code actuel, qui ne marche pas avec la gestion d'erreur, ressemble à ça:

******************************************************************
Option Explicit
On ERROR Resume Next 'la j'aimerai mettre "On ERROR goto maprocedure" mais impossible...
...
'mon code avec des fonctions et des procédures
...
'traiter la premiere erreur qui peut arriver et arreter le script
'maprocedure:
if err.Number > 0 then
    'fichier.writeLine("erreur: " & err.description)
    'fichier.Close
    msgbox err.description
end if
on error goto 0
******************************************************************

mon but final etant d'ecrire l'erreur dans un fichier puis d'arreter le script. Je pense que j'arriverai à faire ça une fois que j'arriverai à afficher l'erreur dans une box!!

En espérant qu'une solution existe et que qq'un la connaisse!! ;-)

merci d'avance!

Rastamath69,plus on travaille , plus on a des problemes, dc plus on a de chances d'en résoudre! [8D]

9 réponses

TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 1
6 nov. 2006 à 20:06
Salut,
Bon, il n'ya pas de réponse parfaite à ton problème.

A part mettre un if err.number<>0 après chaque ligne qui contient du cde susceptible de lever une exception il n'y a pas beaucoup d'autre choix

Sinon, il faut imaginer une organisation plus complexe du genre :

Découper au maximum la fonction principale en sous fonctions (programmation descendante) qui ne réalisent qu'une opération "élémentaire", ainsi il est plus facile d'isoler et de traiter une erreur précise.

La fonction principale devient en quelque sorte un script qui se contente de lancer séquentiellement des sous fonctions (ou plutot sous procédures).
De plus il suffit de faire en sorte que les fonctions qui rencontrent une erreur renvoient false et sinon true (ou un numéro d'erreur personnalisé) et chaque fonction "mère" peut traiter l'erreur des fonctions filles et ainsi un erreur de bas niveau remonte jusqu'à la première fonction appelante qui ,elle,  peut orienter le flux du programme vers des procédures de traitement d'erreur.

Mis à part les problèmes de transmission des variables qui peuvent, sur de trés gros projet (mais on ne fait pas un trés gros projet en vbscript) poser des problèmes de pile, ce procédé est facile à mettre en oeuvre, facile à déboguer (la localisation de la fonction qui bugue localise du même coup le bug lui même) .

Ca donnerait ca (en gros ) :

sub fonctionMere()
r0= fonctionfille1(...)
if r0=0 then
   r1=fonctionfille2(...)
   if r1=0 then
         ....


         else
            if traiterErreur(r1)<>0 then ' si <>0 erreur bloquante : sortir du programme
         exit sub
   end if
 
   end if


else
   if traiterErreur(r0)<>0 then ' si <>0 erreur bloquante : sortir du programme
      exit sub
   end if
end if
end sub


Function fonctionfille1(...) as integer
on error resume next
fonctionfille1=0
instructionSure
InstructionSure
Instruction délicate
if err.number<>then fonctionfille1=err.number:exit sub
instructioSure
...
....
return fonctionfille1
end function

Jcbé[^]
1
Rejoignez-nous