Twitter iPhone pliant OnePlus 12 PS5 Disney+ Orange Livebox Windows 11 ChatGPT

Attendre fermeture fenêtre DOS

4 réponses
Avatar
Bernard CLAUSSE
Boujour à tous,

J'ai créé une macro qui lance un fichier .bat dans une fenêtre DOS.
Comment indiquer à cette macro d'attendre la fin du traitement .bat pour
exécuter la suite ?

A l'heure actuelle, la macro s'exécute sans attendre la fermeture de cette
fenêtre.

Merci
Bernard

4 réponses

Avatar
Loutox
salut bernard
voici un truc que j'avais récupéré sur le ng access (vba)
c'est brut de fonderie et je ne l'ai pas testé, mais si ça peut t'aider :

c'est une
fonction pour attendre la fin d'une commande DOS

Option Explicit

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject
Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32"
(ByVal _
lpApplicationName As Long, ByVal lpCommandLine As
String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes
As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As
Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory
As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal
_
hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&




Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

' Wait for the shelled application to finish:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258

ReturnValue = CloseHandle(proc.hProcess)
End Sub
Avatar
Denis Michon
Bonsoir Bernard,


Un truc qui je crois provient de Laurent Longre ...."trafiqué" peut être par Frédéric Sigonneau !!!

Pour tes besoins, tu n'as qu'à renseigner dans la procédure : " Sub TestWait() " , le chemin du fichier .Bat à
exécuter dans la ligne de code suivante : chemin = "c:Windowssystem32Winmine.exe"

à copier dans un module standard :
'======================= 'Cette section doit être dans le HAUT d'un module standard.
'C'est la déclaration des API
Declare Function WaitForSingleObject Lib "Kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "Kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Const INFINITE = &HFFFF

Function LanceEtAttendLaFin(ByVal CheminComplet As String) As Long
Dim ProcessHandle As Long
Dim ProcessId As Long, ret&

ProcessId = Shell(CheminComplet, vbNormalFocus)
ProcessHandle = OpenProcess(&H1F0000, 0, ProcessId)
LanceEtAttendLaFin = WaitForSingleObject(ProcessHandle, INFINITE)

End Function

Function WaitForEnd(Fichier) As Long
Set wsh = CreateObject("WScript.Shell")
WaitForEnd = wsh.Run(Fichier, 1, True)

End Function

Sub TestWait()
chemin = "c:Windowssystem32Winmine.exe"
WaitForEnd chemin
MsgBox "terminé"
End Sub
'=======================

Salutations!










"Bernard CLAUSSE" a écrit dans le message de news:bmmp04$7ma$

Boujour à tous,

J'ai créé une macro qui lance un fichier .bat dans une fenêtre DOS.
Comment indiquer à cette macro d'attendre la fin du traitement .bat pour
exécuter la suite ?

A l'heure actuelle, la macro s'exécute sans attendre la fermeture de cette
fenêtre.

Merci
Bernard
Avatar
Denis Michon
Bonsoir Bernard,

Si ton problème est de réussir à fermer la fenêtre "Dos" à la fin du batch file, voici une procédure plus facile
d'application :

Sub PlusSimple()
Shell ("command.com /C C:ExcelMonFichier.bat")
End Sub

Si tu veux que la fenêtre DOS reste ouverte après exécution, remplace /c
par /k


Salutations!




"Bernard CLAUSSE" a écrit dans le message de news:bmmp04$7ma$

Boujour à tous,

J'ai créé une macro qui lance un fichier .bat dans une fenêtre DOS.
Comment indiquer à cette macro d'attendre la fin du traitement .bat pour
exécuter la suite ?

A l'heure actuelle, la macro s'exécute sans attendre la fermeture de cette
fenêtre.

Merci
Bernard
Avatar
Bernard CLAUSSE
Merci beaucoup pour vos coups de mains !

Je teste de suite.

Bernard

"Denis Michon" a écrit dans le message news:
LdGjb.139$
Bonsoir Bernard,

Si ton problème est de réussir à fermer la fenêtre "Dos" à la fin du batch
file, voici une procédure plus facile

d'application :

Sub PlusSimple()
Shell ("command.com /C C:ExcelMonFichier.bat")
End Sub

Si tu veux que la fenêtre DOS reste ouverte après exécution, remplace /c
par /k


Salutations!




"Bernard CLAUSSE" a écrit dans le message de
news:bmmp04$7ma$


Boujour à tous,

J'ai créé une macro qui lance un fichier .bat dans une fenêtre DOS.
Comment indiquer à cette macro d'attendre la fin du traitement .bat pour
exécuter la suite ?

A l'heure actuelle, la macro s'exécute sans attendre la fermeture de cette
fenêtre.

Merci
Bernard