Effectuer la même chose qu'un bat ?

  • Initiateur de la discussion Initiateur de la discussion Benoit.Be
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

Benoit.Be

Guest
Bonjour,

J'ai une macro qui lance un fichier load.bat celui ci contient les lignes suivante :
Code:
d:
cd:\Temp
db_load.exe %1
Pause

Dans ma macro j'execute un
Code:
Shell("c:\Test\load.bat " & myFile,vbMaximizedFocus)

Ceci marche très bien. Excel lance une boite de commande qui execute mon db_load et attend que j'appuie sur une touche pour la fermer.

J'aurai voulu savoir si il y a moyen d'effectuer le code du .bat sans executer celui-ci pour rendre ma macro excel autonome et ne plus devoir recopier le fichier .bat
 
Re : Effectuer la même chose qu'un bat ?

Bonjour

Tu peux assu utiliser VBS couplé avec VBA

(Windows Script Host)

exemple:
SOURCE:Batch Scripts for Windows
Code:
'//========================================
'// start an application, feed key strokes
'//========================================
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("notepad")
WScript.Sleep(100)
'// wait 100 ms
WshShell.AppActivate("Notepad")
WScript.Sleep(100)
WshShell.SendKeys("Hello, Jialong")
WshShell.SendKeys("~")
WshShell.SendKeys("From WHS script")
 
Dernière édition:
Re : Effectuer la même chose qu'un bat ?

Merci de vos réponse

Avec
Code:
Shell("d:\Temp\db_load.exe " & myFile,vbMaximizedFocus)
il ne fait pas la pause 🙄

Je vais approfondir la solution de Staple1600
 
Re : Effectuer la même chose qu'un bat ?

Re all,

Pour attendre la fin d'un process, met ce code dans une module

Code:
'S'appelle comme cela :
'TaskId = Shell("C:\Program Files\WinZip\WINZIP32.EXE -min -a -ex -r " & Chr(34) & RepTemp & FichierZip & Chr(34) & " " & Chr(34) & RepTemp & FichierSource & Chr(34))
'Call CheckEndOfProcess ' Appelle la vérification de fin de ZIP
'DoEvents
Dim TaskId As Long
 
Private Const WAIT_INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
Private Declare Function OpenProcess Lib "Kernel32" _
  (ByVal dwDesiredAccess As Long, _
   ByVal bInheritHandle As Long, _
   ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "Kernel32" _
  (ByVal hHandle As Long, _
   ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32" _
  (ByVal hObject As Long) As Long
  
Private Declare Function RegisterWindowMessage _
        Lib "user32" Alias "RegisterWindowMessageA" _
        (ByVal lpString As String) As Long
Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" (ByVal lpClassName As Any, _
        ByVal lpWindowName As Any) As Long
Private Declare Function SendMessage Lib "user32" _
        Alias "SendMessageA" (ByVal hwnd As Long, _
        ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
Sub CheckEndOfCompress() ' Procédure trouvée sur le net !
Dim hProcess As Long
   hProcess = OpenProcess(SYNCHRONIZE, True, TaskId)
   Call WaitForSingleObject(hProcess, WAIT_INFINITE)
   CloseHandle hProcess
End Sub
Ce n'est pas de moi, mais je l'ai trouvé je ne sais plus où ! Et comme indiqué dans les commentaires tu l'appelles comme ceci :

Code:
TaskId = Shell("C:\Program Files\WinZip\WINZIP32.EXE -min -a -ex -r " & Chr(34) & RepTemp & FichierZip & Chr(34) & " " & Chr(34) & RepTemp & FichierSource & Chr(34))
Call CheckEndOfProcess ' Appelle la vérification de fin de ZIP
DoEvents

Tant que la procédure que tu envoies à la fonction n'est pas finie, elle ne rend pas la main !

A+

Creepy
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour