Sub test()
Dim x&, codevbs$, vbsfile$
vbsfile = ThisWorkbook.Path & "\destructeur.vbs"
codevbs = "fself = WScript.ScriptFullName" & vbCrLf
'codevbs = codevbs & "msgbox wscript.arguments.Count" & vbCrLf
codevbs = codevbs & "msgbox ""lancement N° "" & WScript.Arguments(0)" & vbCrLf
codevbs = codevbs & "if WScript.Arguments(0) = 10 then" & vbCrLf
codevbs = codevbs & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
codevbs = codevbs & "objFSO.deletefile fself" & vbCrLf
codevbs = codevbs & "end if" & vbCrLf
x = FreeFile
Open vbsfile For Output As #x: Print #x, codevbs: Close #x
For i = 1 To 10
Set oWsh = CreateObject("Shell.Application")
oWsh.ShellExecute vbsfile, i
Next
End Sub
C'est portnawak ma poule !je vais lancer 10 fois le même vbs qui luimême va afficher un msgbox (donc bloquant puisque modal)
et bien tu va voir que les 10 sont lancés sans attendre la fin de l'instance précédente
OK, je sais qu'on n’exécute jamais un fichier source mais ce dernier chargé en mémoire .c'est ce que j'essaie d'expliquer a @fanch55 qui se demande pourquoi je peux supprimer le fichier vbs lui même dans son propre code
Sub AutoDestruction()
Dim fso As Object
Dim f As Object
Dim cheminScript As String
Dim scriptContent As String
' Chemin où le script VBScript sera enregistré
cheminScript = ThisWorkbook.Path & "\SupprimerClasseur.vbs"
' Créer le contenu du script VBScript
scriptContent = "fself = WScript.ScriptFullName" & vbCrLf & _
"Set objExcel = getobject(,""Excel.Application"")" & vbCrLf & _
"Set objWorkbook = objExcel.Workbooks(""" & ThisWorkbook.Name & """)" & vbCrLf & _
"objWorkbook.Close False" & vbCrLf & _
"Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf & _
"objFSO.DeleteFile """ & ThisWorkbook.FullName & """" & vbCrLf & _
"objExcel.Quit" & vbCrLf & _
"objFSO.deletefile fself"
' Écrire le contenu du script VBScript dans un fichier
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile(cheminScript, True)
f.Write scriptContent
f.Close
' Exécuter le script VBScript
Shell "wscript """ & cheminScript & """", vbNormalFocus
End Sub