j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
***********************************
echo off
sqlplus -s user/pass@BASE @C:\temp\test.sql
if not ErrorLevel 0 goto :Erreur
:Erreur
echo Erreur numero %ErrorLevel%
exit %ErrorLevel%
***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de
la macro?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Bob,
En dos cela peut être difficile... voici une alternative :
A ) J'ai modifié ton batchFile un peu ... la dernière ligne de code
echo Erreur numero %ErrorLevel% > c:erreur.txt
Et j'ai une procédure pour excécuter le code du batchfile et récupérer l'erreur
1 - Le batchfile créé un fichier de sortie où il enregistre l'erreur erreur.txt 2 - La procédure récupère la donnée du fichier erreur.txt 3 - Ce fichier temporaire est détruit .
'------------------------------ Sub RécuupérerErreurBatchFile()
Dim Chemin As String Chemin = "c:"
A = Shell(Chemin & "letest.bat", 1)
Open Chemin & "erreur.txt" For Input As #1 Input #1, erreur Close #1 Kill Chemin & "Erreur.txt" MsgBox erreur
End Sub '------------------------------
Salutations!
"bob" a écrit dans le message de news:c9ps39$rct$ Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA. J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
*********************************** echo off sqlplus -s user/ @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur echo Erreur numero %ErrorLevel% exit %ErrorLevel% ***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de la macro?
Merci de votre aide
Bonjour Bob,
En dos cela peut être difficile... voici une alternative :
A ) J'ai modifié ton batchFile un peu ... la dernière ligne de code
echo Erreur numero %ErrorLevel% > c:erreur.txt
Et j'ai une procédure pour excécuter le code du batchfile et récupérer l'erreur
1 - Le batchfile créé un fichier de sortie où il enregistre l'erreur erreur.txt
2 - La procédure récupère la donnée du fichier erreur.txt
3 - Ce fichier temporaire est détruit .
'------------------------------
Sub RécuupérerErreurBatchFile()
Dim Chemin As String
Chemin = "c:"
A = Shell(Chemin & "letest.bat", 1)
Open Chemin & "erreur.txt" For Input As #1
Input #1, erreur
Close #1
Kill Chemin & "Erreur.txt"
MsgBox erreur
End Sub
'------------------------------
Salutations!
"bob" <bobo@yahoo.fr> a écrit dans le message de news:c9ps39$rct$1@s1.read.news.oleane.net...
Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
***********************************
echo off
sqlplus -s user/pass@BASE @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur
echo Erreur numero %ErrorLevel%
exit %ErrorLevel%
***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de
la macro?
En dos cela peut être difficile... voici une alternative :
A ) J'ai modifié ton batchFile un peu ... la dernière ligne de code
echo Erreur numero %ErrorLevel% > c:erreur.txt
Et j'ai une procédure pour excécuter le code du batchfile et récupérer l'erreur
1 - Le batchfile créé un fichier de sortie où il enregistre l'erreur erreur.txt 2 - La procédure récupère la donnée du fichier erreur.txt 3 - Ce fichier temporaire est détruit .
'------------------------------ Sub RécuupérerErreurBatchFile()
Dim Chemin As String Chemin = "c:"
A = Shell(Chemin & "letest.bat", 1)
Open Chemin & "erreur.txt" For Input As #1 Input #1, erreur Close #1 Kill Chemin & "Erreur.txt" MsgBox erreur
End Sub '------------------------------
Salutations!
"bob" a écrit dans le message de news:c9ps39$rct$ Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA. J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
*********************************** echo off sqlplus -s user/ @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur echo Erreur numero %ErrorLevel% exit %ErrorLevel% ***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de la macro?
Merci de votre aide
Modeste
Bonsour(®), De mémoire même déja sous DOS le errorlevel est difficilement exploitable hors du fichier Bat.
ne pas oublier non plus que VBA et Dos sont asynchrones, prévoir une boucle avant la poursuite de la macro.
Le coderetour qui est récupéré de la commande Shell est en fait "je pense" ??? le N° de tache Windows et non un code erreur.(même sans erreur, ce code change à chaque éxécution)
une solution est de générer un fichier secondaire qui contient le code erreurlevel ou compte-rendu d'exécution, puis agir en conséquence.
une autre solution serait d'utiliser une API ShellExécute qui permet l'envoi d'un code retour.
@+
'-------------------------------------------- ShellExecute permet d'exécuter une application à partir de l'extension d'un fichier associé. Par exemple, lancer Paintbrush à partir d'un fichier BMP, Excel à partir d'un fichier XLS, ou le browser par défaut à partir d'un fichier HTM.
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpszOp As String, _ ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal fsShowCmd As Long) _ As Long
hwnd : Identificateur de fenêtre parent. lpszOp : Opération à effectuer open ou print. lpszFile : Fichier à ouvrir. lpszParams : Paramètres de l'application lorsque lpszFile spécifie une application exécutable. lpszDir : Répertoire par défaut. fsShowCmd : Mode d'ouverture de la fenêtre d'application.
ShellExecute analyse la chaîne lpszFile pour déterminer s'il s'agit d'un fichier ou d'une application. Dans le cas d'un fichier, l'application est déterminée par une recherche dans la base de registre. Dans le cas d'une page html, la chaîne "http://" permet d'identifier le protocole HTTP, ce qui provoque la lecture de la clé "HKCRhttpshellopen" afin d'identifier le browser défini par défaut.
If lRet <= 32 Then lErrNum = 4000 + lRet Select Case lRet Case SE_ERR_FNF Err.Raise lErrNum, "File not found" Case SE_ERR_PNF Err.Raise lErrNum, "Path not found" Case SE_ERR_ACCESSDENIED Err.Raise lErrNum, "Access denied" Case SE_ERR_OOM Err.Raise lErrNum, "Out of memory" Case SE_ERR_DLLNOTFOUND Err.Raise lErrNum, "DLL not found" Case SE_ERR_SHARE Err.Raise lErrNum, "A sharing violation occurred" Case SE_ERR_ASSOCINCOMPLETE Err.Raise lErrNum, "Incomplete or invalid file association" Case SE_ERR_DDETIMEOUT Err.Raise lErrNum, "DDE Time out" Case SE_ERR_DDEFAIL Err.Raise lErrNum, "DDE transaction failed" Case SE_ERR_DDEBUSY Err.Raise lErrNum, "DDE busy" Case SE_ERR_NOASSOC Err.Raise lErrNum, "No association for file extension" Case ERROR_BAD_FORMAT Err.Raise lErrNum, "Invalid EXE file or error in EXE image" Case Else Err.Raise lErrNum, "Unknown error" End Select
End If End Sub
-----Message d'origine----- Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
*********************************** echo off sqlplus -s user/ @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur echo Erreur numero %ErrorLevel% exit %ErrorLevel% ***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de
la macro?
Merci de votre aide
.
Bonsour(®),
De mémoire même déja sous DOS le errorlevel est
difficilement exploitable hors du fichier Bat.
ne pas oublier non plus que VBA et Dos sont asynchrones,
prévoir une boucle avant la poursuite de la macro.
Le coderetour qui est récupéré de la commande Shell est
en fait "je pense" ??? le N° de tache Windows et non un
code erreur.(même sans erreur, ce code change à chaque
éxécution)
une solution est de générer un fichier secondaire qui
contient le code erreurlevel ou compte-rendu d'exécution,
puis agir en conséquence.
une autre solution serait d'utiliser une API ShellExécute
qui permet l'envoi d'un code retour.
@+
'--------------------------------------------
ShellExecute permet d'exécuter une application à partir
de l'extension d'un fichier associé. Par exemple, lancer
Paintbrush à partir d'un fichier BMP, Excel à partir d'un
fichier XLS, ou le browser par défaut à partir d'un
fichier HTM.
Declare Function ShellExecute Lib "shell32.dll"
Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpszOp As String, _
ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal fsShowCmd As Long) _
As Long
hwnd : Identificateur de fenêtre parent.
lpszOp : Opération à effectuer open ou print.
lpszFile : Fichier à ouvrir.
lpszParams : Paramètres de l'application lorsque lpszFile
spécifie une application exécutable.
lpszDir : Répertoire par défaut.
fsShowCmd : Mode d'ouverture de la fenêtre d'application.
ShellExecute analyse la chaîne lpszFile pour déterminer
s'il s'agit d'un fichier ou d'une application. Dans le
cas d'un fichier, l'application est déterminée par une
recherche dans la base de registre. Dans le cas d'une
page html, la chaîne "http://" permet d'identifier le
protocole HTTP, ce qui provoque la lecture de la
clé "HKCRhttpshellopen" afin d'identifier le browser
défini par défaut.
If lRet <= 32 Then
lErrNum = 4000 + lRet Select Case lRet
Case SE_ERR_FNF
Err.Raise lErrNum, "File not found"
Case SE_ERR_PNF
Err.Raise lErrNum, "Path not found"
Case SE_ERR_ACCESSDENIED
Err.Raise lErrNum, "Access denied"
Case SE_ERR_OOM
Err.Raise lErrNum, "Out of memory"
Case SE_ERR_DLLNOTFOUND
Err.Raise lErrNum, "DLL not found"
Case SE_ERR_SHARE
Err.Raise lErrNum, "A sharing violation
occurred"
Case SE_ERR_ASSOCINCOMPLETE
Err.Raise lErrNum, "Incomplete or invalid file
association"
Case SE_ERR_DDETIMEOUT
Err.Raise lErrNum, "DDE Time out"
Case SE_ERR_DDEFAIL
Err.Raise lErrNum, "DDE transaction failed"
Case SE_ERR_DDEBUSY
Err.Raise lErrNum, "DDE busy"
Case SE_ERR_NOASSOC
Err.Raise lErrNum, "No association for file
extension"
Case ERROR_BAD_FORMAT
Err.Raise lErrNum, "Invalid EXE file or error
in EXE image"
Case Else
Err.Raise lErrNum, "Unknown error"
End Select
End If
End Sub
-----Message d'origine-----
Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir
d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
***********************************
echo off
sqlplus -s user/pass@BASE @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur
echo Erreur numero %ErrorLevel%
exit %ErrorLevel%
***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait
en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable
codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout
à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou
dans la commande de
Bonsour(®), De mémoire même déja sous DOS le errorlevel est difficilement exploitable hors du fichier Bat.
ne pas oublier non plus que VBA et Dos sont asynchrones, prévoir une boucle avant la poursuite de la macro.
Le coderetour qui est récupéré de la commande Shell est en fait "je pense" ??? le N° de tache Windows et non un code erreur.(même sans erreur, ce code change à chaque éxécution)
une solution est de générer un fichier secondaire qui contient le code erreurlevel ou compte-rendu d'exécution, puis agir en conséquence.
une autre solution serait d'utiliser une API ShellExécute qui permet l'envoi d'un code retour.
@+
'-------------------------------------------- ShellExecute permet d'exécuter une application à partir de l'extension d'un fichier associé. Par exemple, lancer Paintbrush à partir d'un fichier BMP, Excel à partir d'un fichier XLS, ou le browser par défaut à partir d'un fichier HTM.
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpszOp As String, _ ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal fsShowCmd As Long) _ As Long
hwnd : Identificateur de fenêtre parent. lpszOp : Opération à effectuer open ou print. lpszFile : Fichier à ouvrir. lpszParams : Paramètres de l'application lorsque lpszFile spécifie une application exécutable. lpszDir : Répertoire par défaut. fsShowCmd : Mode d'ouverture de la fenêtre d'application.
ShellExecute analyse la chaîne lpszFile pour déterminer s'il s'agit d'un fichier ou d'une application. Dans le cas d'un fichier, l'application est déterminée par une recherche dans la base de registre. Dans le cas d'une page html, la chaîne "http://" permet d'identifier le protocole HTTP, ce qui provoque la lecture de la clé "HKCRhttpshellopen" afin d'identifier le browser défini par défaut.
If lRet <= 32 Then lErrNum = 4000 + lRet Select Case lRet Case SE_ERR_FNF Err.Raise lErrNum, "File not found" Case SE_ERR_PNF Err.Raise lErrNum, "Path not found" Case SE_ERR_ACCESSDENIED Err.Raise lErrNum, "Access denied" Case SE_ERR_OOM Err.Raise lErrNum, "Out of memory" Case SE_ERR_DLLNOTFOUND Err.Raise lErrNum, "DLL not found" Case SE_ERR_SHARE Err.Raise lErrNum, "A sharing violation occurred" Case SE_ERR_ASSOCINCOMPLETE Err.Raise lErrNum, "Incomplete or invalid file association" Case SE_ERR_DDETIMEOUT Err.Raise lErrNum, "DDE Time out" Case SE_ERR_DDEFAIL Err.Raise lErrNum, "DDE transaction failed" Case SE_ERR_DDEBUSY Err.Raise lErrNum, "DDE busy" Case SE_ERR_NOASSOC Err.Raise lErrNum, "No association for file extension" Case ERROR_BAD_FORMAT Err.Raise lErrNum, "Invalid EXE file or error in EXE image" Case Else Err.Raise lErrNum, "Unknown error" End Select
End If End Sub
-----Message d'origine----- Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
*********************************** echo off sqlplus -s user/ @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur echo Erreur numero %ErrorLevel% exit %ErrorLevel% ***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de
la macro?
Merci de votre aide
.
bob
Super, ça marche et ça me convient parfaitement.
Merci beaucoup
"michdenis" a écrit dans le message news:
Bonjour Bob,
En dos cela peut être difficile... voici une alternative :
A ) J'ai modifié ton batchFile un peu ... la dernière ligne de code
echo Erreur numero %ErrorLevel% > c:erreur.txt
Et j'ai une procédure pour excécuter le code du batchfile et récupérer l'erreur
1 - Le batchfile créé un fichier de sortie où il enregistre l'erreur erreur.txt
2 - La procédure récupère la donnée du fichier erreur.txt 3 - Ce fichier temporaire est détruit .
'------------------------------ Sub RécuupérerErreurBatchFile()
Dim Chemin As String Chemin = "c:"
A = Shell(Chemin & "letest.bat", 1)
Open Chemin & "erreur.txt" For Input As #1 Input #1, erreur Close #1 Kill Chemin & "Erreur.txt" MsgBox erreur
End Sub '------------------------------
Salutations!
"bob" a écrit dans le message de news:c9ps39$rct$
Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA. J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
*********************************** echo off sqlplus -s user/ @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur echo Erreur numero %ErrorLevel% exit %ErrorLevel% ***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande de
la macro?
Merci de votre aide
Super, ça marche et ça me convient parfaitement.
Merci beaucoup
"michdenis" <michdenis@hotmail.com> a écrit dans le message news:
uyquvijSEHA.240@TK2MSFTNGP11.phx.gbl...
Bonjour Bob,
En dos cela peut être difficile... voici une alternative :
A ) J'ai modifié ton batchFile un peu ... la dernière ligne de code
echo Erreur numero %ErrorLevel% > c:erreur.txt
Et j'ai une procédure pour excécuter le code du batchfile et récupérer
l'erreur
1 - Le batchfile créé un fichier de sortie où il enregistre l'erreur
erreur.txt
2 - La procédure récupère la donnée du fichier erreur.txt
3 - Ce fichier temporaire est détruit .
'------------------------------
Sub RécuupérerErreurBatchFile()
Dim Chemin As String
Chemin = "c:"
A = Shell(Chemin & "letest.bat", 1)
Open Chemin & "erreur.txt" For Input As #1
Input #1, erreur
Close #1
Kill Chemin & "Erreur.txt"
MsgBox erreur
End Sub
'------------------------------
Salutations!
"bob" <bobo@yahoo.fr> a écrit dans le message de
news:c9ps39$rct$1@s1.read.news.oleane.net...
Bonjour,
j'ai un fichier .bat que je voudrai lancer à partir d'une macro VBA.
J'utilise la commande :
codeRetour = shell("chemin_fichier_bat",1)
voilà le contenu de mon fichier bat :
***********************************
echo off
sqlplus -s user/pass@BASE @C:temptest.sql
if not ErrorLevel 0 goto :Erreur
:Erreur
echo Erreur numero %ErrorLevel%
exit %ErrorLevel%
***************************************
Je voudrai récupérer la valeur de ErrorLevel. J'ai fait en sorte d'avoir
un
ErrorLevel = 942 par exemple, mais ma variable codeRetour me sort à chaque
appel une valeur aléatoire qui ne correspond pas du tout à ce que je veux.
Y a-t-il une erreur de syntaxe dans mon fichier .bat ou dans la commande
de