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

rastamath69 45 Messages postés vendredi 9 avril 2004Date d'inscription 9 novembre 2009 Dernière intervention - 6 nov. 2006 à 11:38 - Dernière réponse : Cramfr 160 Messages postés mercredi 24 novembre 2004Date d'inscription 8 juillet 2008 Dernière intervention
- 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]
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
TMONOD 260 Messages postés mardi 25 novembre 2003Date d'inscription 6 novembre 2009 Dernière intervention - 6 nov. 2006 à 20:06
1
Merci
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é[^]

Merci TMONOD 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de TMONOD
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 6 nov. 2006 à 11:47
0
Merci
Salut en vb2005 tu as

Try

bloc d'instruction que tu veux

Catch

bloc d'instruction si erreur

End try

A voir si ça fonctionne en vbscript

 Drikce 06
Commenter la réponse de drikce06
TMONOD 260 Messages postés mardi 25 novembre 2003Date d'inscription 6 novembre 2009 Dernière intervention - 6 nov. 2006 à 11:51
0
Merci
Bonjour,
Va voir http://www.lehtml.com/vb/erreur.htm tu trouveras ton bonheur.

Bonne journée.

Jcbé[^]
Commenter la réponse de TMONOD
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 6 nov. 2006 à 12:53
0
Merci
 Bonjour à tous....

"J'ai fait pas mal de recherche et déjà je me suis rendu compte que "Goto" ne marchait pas en VBS"

Doc SCRIPT56
Visual Basic Scripting Edition  


On Error, instruction

Active ou désactive la gestion des erreurs.


On Error Resume Next
On Error GoTo 0
Notes:
Si vous n'utilisez pas d'instruction On Error Resume Next à un autre endroit de votre code,
toute erreur d'exécution se produisant pourra générer l'affichage d'un message d'erreur et
l'arrêt de l'exécution du code. Toutefois, l'hôte exécutant le code détermine le comportement exact.
Parfois, il peut choisir de gérer certaines erreurs de manière différente.
Dans certains cas, le débogueur de scripts pourra être appelé au niveau de l'erreur.
Dans d'autres circonstances, aucune indication apparente d'erreur ne sera mentionnée c
ar l'hôte ne notifie pas l'utilisateur. Là encore, tout est fonction de la manière dont
l'hôte gère les erreurs qui se produisent.


Au sein d'une procédure particulière, une erreur n'est pas nécessairement fatale dès l'instant
où la gestion des erreurs est activée le long de la pile d'appels. Si la gestion locale des erreurs
n'est pas activée dans une procédure et qu'une erreur se produit, le contrôle est repassé à la pile
d'appels jusqu'à ce qu'une procédure avec gestion des erreurs soit trouvée ; l'erreur est alors traitée
à ce niveau. Si la gestion des erreurs n'est activée pour aucune des procédures de la pile d'appels,
un message d'erreur est affiché à ce niveau et l'exécution prend fin ou l'hôte traite l'erreur comme il se doit.


L'instruction On Error Resume Next provoque la poursuite de l'exécution avec l'instruction succédant immédiatement
 à l'instruction ayant provoqué l'erreur d'exécution, ou avec l'instruction suivant immédiatement l'appel le plus
 récent de la procédure contenant l'instruction On Error Resume Next. Ceci permet de poursuivre l'exécution malgré
une erreur d'exécution. Vous pouvez alors créer la routine de gestion d'erreur en ligne à l'intérieur de la procédure.


L'instruction On Error Resume Next devient inactive quand une autre procédure est appelée, de sorte que vous devez
exécuter une instruction On Error Resume Next dans chaque routine appelée si vous souhaitez intégrer la gestion
d'erreurs en ligne dans cette routine. Lorsque vous quittez une procédure, la fonction de gestion des erreurs retrouve
l'état qu'elle présentait avant que vous n'accédiez à cette procédure.


Utilisez On Error GoTo 0 pour désactiver la gestion des erreurs si vous l'avez activée précédemment
avec On Error Resume Next.


L'exemple ci-dessous illustre l'utilisation de l'instruction On Error Resume Next.


Exemple:
On Error Resume Next
Err.Raise 6   ' Génère une erreur de dépassement.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Efface l'erreur.
Caractéristiques requises
Version 1


Voir aussi
Err, objet | Exit, instruction





jean-marc
Commenter la réponse de cs_JMO
rastamath69 45 Messages postés vendredi 9 avril 2004Date d'inscription 9 novembre 2009 Dernière intervention - 6 nov. 2006 à 14:16
0
Merci
Bonjour à vous trois!!

Merci pr vos reponses, mais je ne suis tjrs pas arrivé à résoudre mon problème...

Pour le "try catch", j'avais déjà vu sur différents forums qu'en VBS, son utilisation était douteuse, mais pr en être sur je viens d'essayer et effectivement je n'arrive pas à l'utiliser même en provoquant une erreur précise moi même, à un endroit connu du code...

Pour les réponses de TMONOD et de JMO, elles sont effectivement juste mais les deux sous-entendent que je sais exactement où va se produire mon erreur, ce qui n'est pas le cas...

En effet si je connaissais à l'avance l'endroit où l'erreur pourrait se produire il me suffirait de l'encadrer comme suit:

Option Explicit
On ERROR Resume Next
dim var
'... debut code
var = 100/0
if err.number <> 0 then
    msgbox err.description
    Wscript.quit 1 'ce qui me permet d'arreter mon script suite à l'erreur
end if
'... suite du code

mais le souci c'est que je ne sais pas à quelle ligne pourait se produire une erreur, et c'est pour ça que le ON ERROR RESUME NEXT m'embete car il continue l'exécution de mon code...

C'est pr ça que j'aimerai savoir s'il existe un moyen, lorsqu'une erreur survient ds un VBS, d'arreter l'exécution du code et d'exécuter à la place une procédure particulière, par exemple afficher cette erreur??

Merci en tt cas pour la rapidité de vos réponses!! :-)

Rastamath69,plus on travaille , plus on a des problemes, dc plus on a de chances d'en résoudre! [8D]
Commenter la réponse de rastamath69
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 6 nov. 2006 à 15:21
0
Merci
Salut, as-tu essayé ce qui suit ?

Public Sub MaProcedure(...)
On Error GoTo trtErreur
'...
'... code
'...
Exit Sub ' Si pas d'erreur, inutile de rentrer dans le traitement d'erreur
trtErreur: 'étiquette
'...
'... traitement de l'erreur
'...
End Sub

Et pour savoir quelle ligne provoque une erreur, met un flag avant chaque exécution de ligne, par exemple :

Public Sub MaProcedure(...)
Dim MyFlag
On Error GoTo trtErreur
MyFlag = 1
'... code
MyFlag = 2
'... code
MyFlag = 0
'...
Exit Sub ' Si pas d'erreur, inutile de rentrer dans le traitement d'erreur
trtErreur: 'étiquette
If MyFlag = 1 then
'... traitement de l'erreur sur la ligne 1
ElseIf MyFlag = 2 then
'... traitement de l'erreur sur la ligne 2
Else
'... traitement de l'erreur sur une autre ligne
End If
End Sub
Commenter la réponse de Dolphin Boy
rastamath69 45 Messages postés vendredi 9 avril 2004Date d'inscription 9 novembre 2009 Dernière intervention - 6 nov. 2006 à 15:51
0
Merci
Salut!!

oui j'avais déjà essayé!!
lorsqu'on exécute un tel code VBS, par exemple celui qui suit:
******************************
Option Explicit
dim var

public sub main()
on ERROR goto traitement
    var = 10
    var = var / 0
exit sub

traitement:
msgbox "erreur : " & err.number & " " & err.description
end sub
******************************

cela produit une erreur de syntaxe au niveau de la ligne du "goto maprocedure" ... c'est pour ça que j'en ai déduit que le goto ne marchait pas en VBS...
ça n'a vraiment pas l'air simple de gérer les erreurs ds un VBS... et je suis tjrs bloqué... :-(

Rastamath69,plus on travaille , plus on a des problemes, dc plus on a de chances d'en résoudre! [8D]
Commenter la réponse de rastamath69
rastamath69 45 Messages postés vendredi 9 avril 2004Date d'inscription 9 novembre 2009 Dernière intervention - 7 nov. 2006 à 09:12
0
Merci
Salut!!

OK, lol, c'est ce que je pensais... mais je voulais être sûr qu'une méthode simple de gestion d'erreur ne m'ait pas échappée!!

Merci pour vos réponses!!
ca mettra les choses au clair pour un futur gars comme moi qui se pose la même question!!! :D

Je vous dis @bientôt!!

Rastamath69,plus on travaille , plus on a des problemes, dc plus on a de chances d'en résoudre! [8D]
Commenter la réponse de rastamath69
Cramfr 160 Messages postés mercredi 24 novembre 2004Date d'inscription 8 juillet 2008 Dernière intervention - 7 nov. 2006 à 16:24
0
Merci
bonjour,
A titre indicatif le vbscript utilise la version  3 de vb ce qui explique les manques...

Cramsoturf le VBien en quête de nouveau programme
Commenter la réponse de Cramfr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.