rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 2009
-
6 nov. 2006 à 11:38
Cramfr
Messages postés160Date d'inscriptionmercredi 24 novembre 2004StatutMembreDerniè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]
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201826 6 nov. 2006 à 12:53
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 20091 6 nov. 2006 à 14:16
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]
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 6 nov. 2006 à 15:21
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
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 20091 6 nov. 2006 à 15:51
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]