lancer un fichier .bat avec VBA

adjovi7

XLDnaute Junior
Bonjour,

J'aurais besoin de votre aide pour finaliser ma macro.
Je m'explique j'ai un fichier batch dans certains nombres de mes dossiers que j'aimerais exécuter avec un bouton
bien entendu j'ai plusieurs dossiers dont je parcours avec une boucle et la commande shell pour lancer mon batch

au lancement de ma macro j'ai erreur exécution 5 au niveau de la commande shell après recherche j'arrive pas a trouver la solution
ci -joint ma macro

Sub Facturation()
Application.ScreenUpdating = False

Dim aa As Object
Dim myPath As String, myFolder As String, mainFolder As Folder, batFile As String


Set aa = CreateObject("scripting.filesystemobject")
myPath = "R:\DEVIS\SUIVI COMMANDES ET DEVIS\"
ChDir (myPath)
ChDir ("..")
myFolder = CurDir(myPath)
myFolder = Dir(myPath & "\", vbDirectory)
batFile = Dir(myPath & "\TestMiguelV3.bat")


Set mainFolder = aa.GetFolder(myFolder)
Do While myFolder <> ""
If GetAttr(myPath & "\" & batFile) = vbDirectory Then
Shell batFile

End If
myFolder = Dir()
Loop
Set aa = Nothing
Set mainFolder = Nothing
End Sub

Cordialement,
Adjovi
 

Roland_M

XLDnaute Barbatruc
Re : lancer un fichier .bat avec VBA

bonsoir,

vite fais comme ça, essaies un peu ceci:

Commande$ = "cmd.exe " & batFile
Shell Commande$, vbMaximizedFocus

EDIT:
ton code ne peut pas fonctionner ainsi
tout d'abord tu as des initialisations pas très catholiques
et surtout ta boucle est inutile puisque tu es dans un seul dossier
il faut une macro récursive sur les sous dossiers depuis le dossier de base
et en plus le test vbdirectory avec le nom du fichier ça peut pas marcher !

si j'ai le temps j'y regarde mais là on m'appelle pour le casse-croute, certainement l'apéro !?
pendant ce temps expliques un peu le déroulement de ce que tu souhaites !?
 
Dernière édition:

adjovi7

XLDnaute Junior
Re : lancer un fichier .bat avec VBA

bonsoir,

je m'explique dans mon dossier de base DEVIS SUIVI COMMANDES ET DEVIS sur mon lecteur R
j'ai plusieurs dossiers (dossier1 dossier2 dossier3 jusqu'au dossier52) dans chaque dossier j'ai mis un fichier batch pour un traitement spécifique. depuis ma macro via un bouton j'aimerais lancer mes fichiers batch

Cordialement,
Adjovi
 

Roland_M

XLDnaute Barbatruc
Re : lancer un fichier .bat avec VBA

Bonsoir,

veux tu bien essayer ceci !
pour essai j'ai mis un msgbox pour voir si les appels sont exécutés correctement
et en rem pour l'instant la ligne shell

Code:
Private Const RepDeBase$ = "R:\DEVIS\SUIVI COMMANDES ET DEVIS"
Private Const FichierBat$ = "TestMiguelV3.bat"

Sub Facturation()
Dim Dossier As Object
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(RepDeBase)
Application.ScreenUpdating = False: Application.EnableEvents = False: Application.Calculation = xlCalculationManual
LoadSuiteDossier Dossier
Application.ScreenUpdating = True: Application.EnableEvents = True: Application.Calculation = xlCalculationAutomatic
Set Dossier = Nothing
End Sub

Private Sub LoadSuiteDossier(ByRef Rep) 'appel récursif
On Error GoTo Suite
PathFichBat$ = Rep & "\" & FichierBat$
If Dir(PathFichBat$) > "" Then ExecuteFichBath PathFichBat$
For Each SousRep In Rep.SubFolders
 If (SousRep.Attributes And 1024) = 0 Then LoadSuiteDossier SousRep
Next
Suite:
End Sub

Sub ExecuteFichBath(PathFichBat$)
MsgBox "appel pour exécuter: > " & PathFichBat$
'Shell PathFichBat$
End Sub
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : lancer un fichier .bat avec VBA

bonsoir,

veux tu bien reprendre celui-ci, j'avais oublié un Chdir pour se placer sur le répertoire !

Code:
Private Const RepDeBase$ = "R:\DEVIS\SUIVI COMMANDES ET DEVIS"
Private Const FichierBat$ = "TestMiguelV3.bat"

Sub Facturation()
Dim Dossier As Object
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(RepDeBase)
Application.ScreenUpdating = False: Application.EnableEvents = False: Application.Calculation = xlCalculationManual
LoadSuiteDossier Dossier
Application.ScreenUpdating = True: Application.EnableEvents = True: Application.Calculation = xlCalculationAutomatic
Set Dossier = Nothing
ChDir ThisWorkbook.Path
End Sub

Private Sub LoadSuiteDossier(ByRef Rep) 'appel récursif
On Error GoTo Suite
If Dir(Rep & "\" & FichierBat$) > "" Then ExecuteFichBath Rep, FichierBat$
For Each SousRep In Rep.SubFolders
 If (SousRep.Attributes And 1024) = 0 Then LoadSuiteDossier SousRep
Next
Suite:
End Sub

Sub ExecuteFichBath(Rep, FichierBat$)
'MsgBox "appel pour exécuter:> " & Rep & "\" & FichierBat$
ChDir Rep: Shell FichierBat$
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 584
Membres
103 247
dernier inscrit
bottxok