Macro Excel avec exécution d'un .bat
om51ft
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Mon fichier d'entrée contient 4 rubriques : ville entrée, dep entrée, ville sortie, dep sortie
Ma macro créé un fichier avec 2 lignes.
1er ligne : ville entrée, dep entrée
2ème ligne : ville sortie, dep sortie
Je voudrais pouvoir exécuter un .bat à partir de cette macro Excel. Est-ce possible ? Ce .bat lance une requète avec un autre utilitaire qui me renvoit le kilomètrage entre les 2 villes. En sortie, je dois récupérer un fichier avec toutes les informations du fichier en entrée, plus le kilométrage
Merci de vos idées
Mon fichier d'entrée contient 4 rubriques : ville entrée, dep entrée, ville sortie, dep sortie
Ma macro créé un fichier avec 2 lignes.
1er ligne : ville entrée, dep entrée
2ème ligne : ville sortie, dep sortie
Je voudrais pouvoir exécuter un .bat à partir de cette macro Excel. Est-ce possible ? Ce .bat lance une requète avec un autre utilitaire qui me renvoit le kilomètrage entre les 2 villes. En sortie, je dois récupérer un fichier avec toutes les informations du fichier en entrée, plus le kilométrage
Merci de vos idées
A voir également:
- Macro Excel avec exécution d'un .bat
- Creer un fichier .bat - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Trier un tableau excel - Guide
24 réponses
bonjour
Ma macro crée n fichiers qui seront ensuite traités n fois par le .bat
Il suffit de passer le nom du fichier en paramètre au .bat et lorsque tu crées le fichier tu lances l'exécution dans la même boucle.
Ma macro crée n fichiers qui seront ensuite traités n fois par le .bat
Il suffit de passer le nom du fichier en paramètre au .bat et lorsque tu crées le fichier tu lances l'exécution dans la même boucle.
bonjour
Je voudrais pouvoir exécuter un .bat à partir de cette macro Excel. Est-ce possible ?
Tu peux effectivement lancer un .bat avec entre autre la fonction Shell, dont l'aide dit :
Lance un programme exécutable et renvoie une valeur de type Variant (Double) représentant l'identificateur (ID) de la tâche exécutée en cas de succès, ou un zéro en cas d'échec.
C'est un processus qui a son rythme propre et donc il faut mettre en place une procédure pour pouvoir en contrôler la fin d'exécution.
Il est possible par exemple de mettre le résultat dans un fichier et de contrôler son écriture effective dans la macro .
Je voudrais pouvoir exécuter un .bat à partir de cette macro Excel. Est-ce possible ?
Tu peux effectivement lancer un .bat avec entre autre la fonction Shell, dont l'aide dit :
Lance un programme exécutable et renvoie une valeur de type Variant (Double) représentant l'identificateur (ID) de la tâche exécutée en cas de succès, ou un zéro en cas d'échec.
Syntaxe Shell(pathname[,windowstyle])
C'est un processus qui a son rythme propre et donc il faut mettre en place une procédure pour pouvoir en contrôler la fin d'exécution.
Il est possible par exemple de mettre le résultat dans un fichier et de contrôler son écriture effective dans la macro .
Ok, ca marche. J'exécute le .bat
Je voudrais par contre exécuter ce .bat n fois.
J'ai n lignes dans mon fichier Excel. Ma macro crée n fichiers qui seront ensuite traités n fois par le .bat.
Comment faire dans la macro pour exécuter autant de fois le .bat qu'il y a de fichiers créés ?
Merci des réponses.
Je voudrais par contre exécuter ce .bat n fois.
J'ai n lignes dans mon fichier Excel. Ma macro crée n fichiers qui seront ensuite traités n fois par le .bat.
Comment faire dans la macro pour exécuter autant de fois le .bat qu'il y a de fichiers créés ?
Merci des réponses.
Merci des infos.
je créé des fichiers output- n.txt en sortie de la macro.
à partir de ce fichier créé, je vaux exécuter le .bat : et je ne vois pas comment passer cette info en paramètre.
Serait-il possible que je te fasse parvenir ma macro excel ?
Merci
je créé des fichiers output- n.txt en sortie de la macro.
à partir de ce fichier créé, je vaux exécuter le .bat : et je ne vois pas comment passer cette info en paramètre.
Serait-il possible que je te fasse parvenir ma macro excel ?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour
Lorsque tu lances ton .BAT, tu mets : Shell(mon.bat mon_fichier.txt ) et dans ton .bat au lieu d'utiliser un fichier fixe, tu remplace son nom par %1 qui à l'exécution récupérera ton paramètre mon_fichier.txt .
Si tu ne comprends pas comment faire tu peux mettre la macro sur le sujet si elle est non nominative sinon tu peux toujours la mettre en message personnel et je la banaliserait pour aider ceux que cela intéresse.
Lorsque tu lances ton .BAT, tu mets : Shell(mon.bat mon_fichier.txt ) et dans ton .bat au lieu d'utiliser un fichier fixe, tu remplace son nom par %1 qui à l'exécution récupérera ton paramètre mon_fichier.txt .
Si tu ne comprends pas comment faire tu peux mettre la macro sur le sujet si elle est non nominative sinon tu peux toujours la mettre en message personnel et je la banaliserait pour aider ceux que cela intéresse.
Bonjour
Merci de toutes tes infos.
Je ne sais comment faire pour mettre la macro en message personnel : c'est la première fois que j'utilise un forum.
Merci
Merci de toutes tes infos.
Je ne sais comment faire pour mettre la macro en message personnel : c'est la première fois que j'utilise un forum.
Merci
bonjour
Je ne sais comment faire pour mettre la macro en message personne
Tu double cliques sur le pseudo en haut de ce message et sur la nouvelle fenêtre tu choisis "lui écrire un message" puis tu fais un coller de ta macro.
@+
Je ne sais comment faire pour mettre la macro en message personne
Tu double cliques sur le pseudo en haut de ce message et sur la nouvelle fenêtre tu choisis "lui écrire un message" puis tu fais un coller de ta macro.
@+
Bonjour
J'ai toujours des problèmes avec ma macro excel et le lancement du .bat ( avec paramètres ).
Les fichiers créés par ma macro sont de cette forme : output- x.txt ( x est un incrément )
Je dois lancer un .bat qui va prendre en entrée les fichiers output- x.txt
Je ne sais pas comment passer le fichier en paramètre dans le shell ( dont voici la struture que j'ai mise dans ma macro )
Shell "d:\LOXANE\REQBAT.BAT"
Exemple du .bat : ( 6 correspond au 6ème fichier créé )
copy "D:\LOXANE\output- 6.txt" D:\LOXANE\TEST\LOXANET\LOXVKM.TXT
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
Merci du retour d'info.
J'ai toujours des problèmes avec ma macro excel et le lancement du .bat ( avec paramètres ).
Les fichiers créés par ma macro sont de cette forme : output- x.txt ( x est un incrément )
Je dois lancer un .bat qui va prendre en entrée les fichiers output- x.txt
Je ne sais pas comment passer le fichier en paramètre dans le shell ( dont voici la struture que j'ai mise dans ma macro )
Shell "d:\LOXANE\REQBAT.BAT"
Exemple du .bat : ( 6 correspond au 6ème fichier créé )
copy "D:\LOXANE\output- 6.txt" D:\LOXANE\TEST\LOXANET\LOXVKM.TXT
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
Merci du retour d'info.
bonjour
En fait pour que cela fonctionne, il faudrait tu tu traite en boucle tes fichiers et à chaque fichier créé lancer le .bat.
Pour lancer ton .bat
Shell "d:\LOXANE\REQBAT.BAT x.txt"
Dans le .bat tu ne mets qu'une ligne pour un fichier banalisé
copy "D:\LOXANE\output- %1" D:\LOXANE\TEST\LOXANET\LOXVKM%1
Mais je ne vois pas bien ce que tu veux faire avec les autres lignes ?
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
En fait pour que cela fonctionne, il faudrait tu tu traite en boucle tes fichiers et à chaque fichier créé lancer le .bat.
Pour lancer ton .bat
Shell "d:\LOXANE\REQBAT.BAT x.txt"
Dans le .bat tu ne mets qu'une ligne pour un fichier banalisé
copy "D:\LOXANE\output- %1" D:\LOXANE\TEST\LOXANET\LOXVKM%1
Mais je ne vois pas bien ce que tu veux faire avec les autres lignes ?
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
La première ligne copie le fichier dans le répertoire REQ pour être traité par CALCUL_ITI.RX (2ème ligne ) qui renvoit un kilométrage.
Il faut ensuite que je récupére ce kilométrage pour le remettre avec le couple de mon fichier qui est en entrée.
L'appel au shell est dans la boucle de création du fichier output- x.txt, mais cela ne fonctionne pas bien. J'ai peut-être mal renseigné mon appel :
Application.DisplayAlerts = False
zFormattageNomVilles
Worksheets("SAP").Select
i = 1
fichierloxane = ""
While Worksheets("SAP").Cells(i, 1).Value <> ""
Worksheets("Output").Cells(2, 1).Value = Worksheets("SAP").Cells(i, 1).Value
Worksheets("Output").Cells(2, 2).Value = Worksheets("SAP").Cells(i, 2).Value
Worksheets("Output").Cells(3, 1).Value = Worksheets("SAP").Cells(i, 3).Value
Worksheets("Output").Cells(3, 2).Value = Worksheets("SAP").Cells(i, 4).Value
Sheets("Output").Select
Range("A1").Select
Enreg (i)
Shell "d:\REQLOX\TSREQITI.BAT i.txt"
i = i + 1
Wend
Et dans mon .Bat :
copy "D:\LOXANE\output- %1" D:\LOXANE\TEST\LOXANET\LOXVKM%1
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
Pas facile pour moi, merci de toutes tes infos et de ton aide.
Il faut ensuite que je récupére ce kilométrage pour le remettre avec le couple de mon fichier qui est en entrée.
L'appel au shell est dans la boucle de création du fichier output- x.txt, mais cela ne fonctionne pas bien. J'ai peut-être mal renseigné mon appel :
Application.DisplayAlerts = False
zFormattageNomVilles
Worksheets("SAP").Select
i = 1
fichierloxane = ""
While Worksheets("SAP").Cells(i, 1).Value <> ""
Worksheets("Output").Cells(2, 1).Value = Worksheets("SAP").Cells(i, 1).Value
Worksheets("Output").Cells(2, 2).Value = Worksheets("SAP").Cells(i, 2).Value
Worksheets("Output").Cells(3, 1).Value = Worksheets("SAP").Cells(i, 3).Value
Worksheets("Output").Cells(3, 2).Value = Worksheets("SAP").Cells(i, 4).Value
Sheets("Output").Select
Range("A1").Select
Enreg (i)
Shell "d:\REQLOX\TSREQITI.BAT i.txt"
i = i + 1
Wend
Et dans mon .Bat :
copy "D:\LOXANE\output- %1" D:\LOXANE\TEST\LOXANET\LOXVKM%1
copy D:\LOXANE\TEST\LOXANET\LOXVKM "D:\LOXANe\WAYSERV\REQ"
copy D:\REQLOX\CALCUL_ITI.RX "D:\LOXANE\WayServ\REQ"
Pas facile pour moi, merci de toutes tes infos et de ton aide.
Ne faut-il pas que je mette mon appel au .bat à la création du fichier comme suit; mais avec quel paramètrage derrière TSREQITI.BAT ?
Sheets("output").Select
loxanefichier = "output-" + Str(i)
ChDir _
"D:\Loxane"
ActiveWorkbook.SaveAs Filename:= _
"D:\Loxane\" + loxanefichier + ".txt" _
, FileFormat:=xlText, CreateBackup:=False
Shell "d:\REQLOX\TSREQITI.BAT"
ActiveSheet.Select
ActiveSheet.Name = "output"
Range("H3").Select
Sheets("output").Select
loxanefichier = "output-" + Str(i)
ChDir _
"D:\Loxane"
ActiveWorkbook.SaveAs Filename:= _
"D:\Loxane\" + loxanefichier + ".txt" _
, FileFormat:=xlText, CreateBackup:=False
Shell "d:\REQLOX\TSREQITI.BAT"
ActiveSheet.Select
ActiveSheet.Name = "output"
Range("H3").Select
Bonjour,
J'ai presque fini, ma macro fonctionne et crée un fichier avec les bonnes zones, mais j'ai été fortement aidée.( Il va falloir que je demande une formation pour comprendre tout ! )Seulement ces zones sont séparées par des carrés, je voudrais que ces zones soient séparées par des ; . comme faire dans la macro ?
Merci pour le retour d'info
J'ai presque fini, ma macro fonctionne et crée un fichier avec les bonnes zones, mais j'ai été fortement aidée.( Il va falloir que je demande une formation pour comprendre tout ! )Seulement ces zones sont séparées par des carrés, je voudrais que ces zones soient séparées par des ; . comme faire dans la macro ?
Merci pour le retour d'info
Bonjour
Je vourdrais pouvoir éliminer les lignes où le résultat est négatif. J'ai ajouté le test ( là où il y a ), mais cela m'écrit quand même une ligne mais à blanc. Je ne veux pas de ligne à blanc. je veux que mon fichier résultat ait des lignes qui se suivent.
Merci du retour d'info
' Ouverture du fichier retour de Loxane
ChDir "D:\Loxane\WayServ\Req"
Workbooks.OpenText Filename:="D:\Loxane\WayServ\Req\LOXKM", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
Array(3, 2), Array(4, 2), Array(5, 2)), TrailingMinusNumbers:=True
' Recopie des données
Windows("LOXKM").Activate
Range("A1:E2").Select
<gras> If Range("E2") > 0 Then
Selection.Copy
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
Range("G1").Select
ActiveSheet.Paste
Beep
Worksheets("LOXANE").Cells(i, 1).Value = Left(Worksheets("LOXANE").Cells(1, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 2).Value = Worksheets("LOXANE").Cells(1, 10).Value
Worksheets("LOXANE").Cells(i, 3).Value = Left(Worksheets("LOXANE").Cells(2, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 4).Value = Worksheets("LOXANE").Cells(2, 10).Value
Worksheets("LOXANE").Cells(i, 5).Value = Worksheets("LOXANE").Cells(1, 7).Value
Beep
End If
' Suppression Donnnées source
Range("G1:K3").Select
Selection.ClearContents
Workbooks("LOXKM").Sheets("LOXKM").Activate
Windows("LOXKM").Activate
ActiveWorkbook.Close
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
End Function
Je vourdrais pouvoir éliminer les lignes où le résultat est négatif. J'ai ajouté le test ( là où il y a ), mais cela m'écrit quand même une ligne mais à blanc. Je ne veux pas de ligne à blanc. je veux que mon fichier résultat ait des lignes qui se suivent.
Merci du retour d'info
' Ouverture du fichier retour de Loxane
ChDir "D:\Loxane\WayServ\Req"
Workbooks.OpenText Filename:="D:\Loxane\WayServ\Req\LOXKM", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
Array(3, 2), Array(4, 2), Array(5, 2)), TrailingMinusNumbers:=True
' Recopie des données
Windows("LOXKM").Activate
Range("A1:E2").Select
<gras> If Range("E2") > 0 Then
Selection.Copy
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
Range("G1").Select
ActiveSheet.Paste
Beep
Worksheets("LOXANE").Cells(i, 1).Value = Left(Worksheets("LOXANE").Cells(1, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 2).Value = Worksheets("LOXANE").Cells(1, 10).Value
Worksheets("LOXANE").Cells(i, 3).Value = Left(Worksheets("LOXANE").Cells(2, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 4).Value = Worksheets("LOXANE").Cells(2, 10).Value
Worksheets("LOXANE").Cells(i, 5).Value = Worksheets("LOXANE").Cells(1, 7).Value
Beep
End If
' Suppression Donnnées source
Range("G1:K3").Select
Selection.ClearContents
Workbooks("LOXKM").Sheets("LOXKM").Activate
Windows("LOXKM").Activate
ActiveWorkbook.Close
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
End Function
bonjour
En fait ce que tu nous donnes comme code ne concerne pas ton problème.
Tes données sont mises par la fonction sur la ligne i mais c'est l'appel à la fonction que tu devrais regarder car c'est là qu'il ne faudrait pas faire progresser i.
ChDir "D:\Loxane\WayServ\Req"
cette ligne est inutile puisque tes chemins sont complets.
En fait ce que tu nous donnes comme code ne concerne pas ton problème.
Tes données sont mises par la fonction sur la ligne i mais c'est l'appel à la fonction que tu devrais regarder car c'est là qu'il ne faudrait pas faire progresser i.
ChDir "D:\Loxane\WayServ\Req"
cette ligne est inutile puisque tes chemins sont complets.
Bonjour
Voici l'appel de ma fonction Lecture résultat :
' Chargement des données résultats de Loxane (fichier LOXKM) si existe
FindFileRes
test = Worksheets("ListeFichiers").Cells(4, 2).Value
If test <> 0 Then
LectureResultats (n)
' Incrément secondaire pour les résultats
n = n + 1
End If
Je ne vois pas comment je peux mettre le test qui me permettrait de ne pas prendre en compte la ligne où le calcul du kilométrage est négatif. Je ne comprends déjà pas la structure de ce code :
test = Worksheets("ListeFichiers").Cells(4, 2).Value
Merci de ton aide.
Florence
Voici l'appel de ma fonction Lecture résultat :
' Chargement des données résultats de Loxane (fichier LOXKM) si existe
FindFileRes
test = Worksheets("ListeFichiers").Cells(4, 2).Value
If test <> 0 Then
LectureResultats (n)
' Incrément secondaire pour les résultats
n = n + 1
End If
Je ne vois pas comment je peux mettre le test qui me permettrait de ne pas prendre en compte la ligne où le calcul du kilométrage est négatif. Je ne comprends déjà pas la structure de ce code :
test = Worksheets("ListeFichiers").Cells(4, 2).Value
Merci de ton aide.
Florence
bonjour
Dans la fonction
Dans l'appel
Cela permet d'avoir un résultat utile à la fonction car tu as en fait utilisé la fonction comme une procédure.
Dans la fonction
LectureResultats = 0
If Range("E2") > 0 Then
LectureResultats = 1
Selection.Copy
Dans l'appel
LectureResultats (n) ' Incrément secondaire pour les résultats si présent if LectureResultats<> 0 then n = n + 1
Cela permet d'avoir un résultat utile à la fonction car tu as en fait utilisé la fonction comme une procédure.
Je viens de faire le test.
Ca marche ;-))))))))))
Merci beaucoup pour ton aide précieuse qui m'a enlevée un stress terrible, car la date butoir du fonctionnement en automatique approchait à grands pas.
J'ai mis dans le test cela :
if LectureResultats(n)<> 0 then n = n + 1
Merci à l'auvergne depuis la marne.
Ca marche ;-))))))))))
Merci beaucoup pour ton aide précieuse qui m'a enlevée un stress terrible, car la date butoir du fonctionnement en automatique approchait à grands pas.
J'ai mis dans le test cela :
if LectureResultats(n)<> 0 then n = n + 1
Merci à l'auvergne depuis la marne.
Oups, j'ai encore une question.
Quelle est l'instruction pour fermer Excel
J'ai créé une tache schedule, qui lance la macro Excel, mais le classeur reste ouvert.
Comment le fermer ?
Merci d'avance pour la réponse
Florence
Quelle est l'instruction pour fermer Excel
J'ai créé une tache schedule, qui lance la macro Excel, mais le classeur reste ouvert.
Comment le fermer ?
Merci d'avance pour la réponse
Florence