Boucler script vbs

bonjour a tous,
j’ai fait un script en vbs(voir ci-dessous) et je souhaiterais a la fin de mon script poser la question: “que voulez vous fair?” avec comme type de msgbox: “vbretrycancel” et attribuer a “vbretry” la commande qui me permetrais de recomencer le script.Ma question est la suivante: Comment quelles sont les commandes qui permetent de boucler un script en vbs,et comment puis-je les utilisers?

mon script est:

Q1 = Msgbox (“pour que ce script s’éxecute correctement vous devez avoir configurer outlook expresse,voulez vous continuer?”,vbyesno,“voulez vous continuer?”)
If Q1 = vbno then Q2 = msgbox (“etes vous sur de vouloir quitter?”,vbyesno,“comfirmation”)
if Q2 = vbyes then wscript.quit

ADRESSE1=inputbox(“entrer votre adresse e-mail”)
ADRESSE2=inputbox(“entrer l’adresse e-mail de votre contact”)
SUJET1=inputbox(“taper le sujet de votre message”)
MESSAGE1=inputbox(“taper votre message”)

With CreateObject(“CDO.Message”)
.From=""&ADRESSE1&""
.To=""&ADRESSE2&""
.Subject=""&SUJET1&""
.TextBody=""&MESSAGE1&""
On Error Resume Next
.Send
If Err Then MsgBox “une erreur c’est produite l’e-mail n’a pas put etre envoyer”,vbcritical,“erreur”
On Error GoTo 0
End With

’ Displaying Timed Progress Message Boxes
Const TIMEOUT = 1 ’ secondes avant la disparition de la messagebox
Set objShell = WScript.CreateObject(“WScript.Shell” )
objShell.Popup “le script a été executer a…”, TIMEOUT

On Error Resume Next

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\” & strComputer & “\root\cimv2”)

Set colItems = objWMIService.ExecQuery(“Select * from Win32_LocalTime”)

For Each objItem in colItems
objShell.Popup "heure: " & objItem.Hour , timeout
objShell.Popup "Minute: " & objItem.Minute , timeout

Next

Tu peux essayer une boucle du genre

Do
ton script…
Rep = MsgBox(“Continuer le script”, vbretrycancel, “Continuer ?”)
loop while Rep = vbretry

Apres que gcc m’ai apporter sont aide mon script donne:

Q1 = Msgbox (“pour que ce script s’éxecute correctement vous devez avoir configurer outlook expresse,voulez vous continuer?”,vbyesno,“voulez vous continuer?”)
If Q1 = vbno then Q2 = msgbox (“etes vous sur de vouloir quitter?”,vbyesno,“comfirmation”)
if Q2 = vbyes then wscript.quit

do

ADRESSE1=inputbox(“entrer votre adresse e-mail”)
ADRESSE2=inputbox(“entrer l’adresse e-mail de votre contact”)
SUJET1=inputbox(“taper le sujet de votre message”)
MESSAGE1=inputbox(“taper votre message”)

With CreateObject(“CDO.Message”)
.From=""&ADRESSE1&""
.To=""&ADRESSE2&""
.Subject=""&SUJET1&""
.TextBody=""&MESSAGE1&""
On Error Resume Next
.Send
If Err Then MsgBox “une erreur c’est produite l’e-mail n’a pas put etre envoyer”,vbcritical,“erreur”
On Error GoTo 0
End With

on error resume next

’ Displaying Timed Progress Message Boxes
Const TIMEOUT = 1.5 ’ secondes avant la disparition de la messagebox
Set objShell = WScript.CreateObject(“WScript.Shell” )
objShell.Popup “le script a été executer a…”, TIMEOUT

On Error Resume Next

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\” & strComputer & “\root\cimv2”)

Set colItems = objWMIService.ExecQuery(“Select * from Win32_LocalTime”)

For Each objItem in colItems
objShell.Popup "heure: " & objItem.Hour , timeout
objShell.Popup "Minute: " & objItem.Minute , timeout

Next

Q3 = msgbox (“que voulez vous fair maintenant?”,vbretrycancel,“recommencer”)
if Q3 = vbcancel then wscript.quit
loop while Q3 = vbretry

C’est certainement un script simpliste mais je débute, donc je te remerci gcc de m’avoir apporter t’on aide :wink:
Edité le 23/11/2007 à 21:52

En fait, tu n’as pas besoin de la ligne
if Q3 = vbabort then wscript.quit
parce que dans ce cas de figure, tu sors de la boucle, et donc tu quittes le programme de façon naturelle

Peut être une ou deux améliorations à apporter :
Faire une vérification minimale des valeurs paramètres Adresse/Sujet/message, et ne lancer le Send que si au moins la syntaxe est correcte.
Réduire la portée du On Error Resume Next (repasser en mode “standard” juste avant la question Q3= …)
Corriger les fautes d’orthographe

Pour la commande “On Error Resume Next” j’ai du en rajouter une car l’or de la fin du script si j’utilise la commande “loop” j’ai une erreure concernant la constante TIMEOUT.je ne sais pas repasser en mode “standard” apres la commande “On Error Resume Next” donc si tu pouvait m’indiquet la marche a suivre sa serait sympa :wink: Et en ce qui concerne les améliorations dont tu parle si tu as des propositions/idées n’hésite pas a m’en fair part,si je peut améliorer mon script.

Les propositions, je te les ai faites plus haut ;
pas grand chose à rajouter de plus, tu ne cherches pas la perfection.
Ce serait quand même bien de prendre l’habitude de déclarer tes variables :
regarde dans l’aide VBA ce qui concerne Option Explicit et DIM
Ce ne serait pas mal non plus d’indenter ton texte pour une meilleure lisibilité (tu ne tiens pas compte de la remarque si c’est le copier/coller dans le forum qui a supprimé la mise en page)

En ce qui concerne la gestion des erreurs, va faire un tour sur google (ou directement sur le site de microsoft) pour avoir la démarche à suivre.
Sinon, c’est aussi très bien expliqué dans l’aide d’excel (VBA), mais pas facile à trouver par l’index ou l’aide intuitive.
Essaie la méthode suivante :

  • tu te places dans ton module vba.
  • sur une ligne vierge, tu tapes on error, tu le sélectionnes avec la souris et tu appuies sur F1.
  • tu devrais normalement tomber sur la rubrique d’aide de Error , et tu choisis le lien on Error
    Là tu auras tout ce qu’il faut connaître avant de commencer à utiliser cette instruction (dans l’absolu, la méthode est valable pour l’ensemble des instructions VBA).
    En particulier, tu verras l’utilisation de On Error GoTo 0 pour invalider une gestion d’erreurs précédemment activée.