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

Commande Shell ne fait rien

1 réponse
Avatar
yann.millerioux
Bonjour,
j'ai un problème avec une commande shell dans un module vba Access.
En fait j'exécute un .bat qui fait un transfert ftp sur un site
mainframe.
Lorsque je passe la module en débug, ça marche, lorsque j'exécute en
normal, il ne se passe rien, la fenêtre DOS s'ouvre et se ferme
immédiatement, et je n'ai rien de transféré.
Quelqu'un aurait une idée, svp ?
Merci à tous.

pour info, mon bout de code :


' Demande le user et mot de passe de l'utilisateur pour le transfert
ftp
Do Until User <> "" And User <> "user"
User = InputBox("Veuillez saisir votre User pour le système
central", _
"Saisie du user", "User")
Loop
Do Until Pass <> "" And Pass <> "Mot de passe"
Pass = InputBox("Veuillez saisir votre mot de passe pour ce
user", "Saisie du mot de passe", "Mot de passe")
Loop

ChDir (Chemin)

' Crée le fichier .bat
If Dir(Batch) <> vbNullString Then
Kill Chemin & Batch
End If

Open Chemin & Batch For Output As #1
Print #1, "Pause"
Print #1, "cls"
Print #1, "Pause"
Print #1, "mkdir Temp"
Print #1, "Pause"
Print #1, "@FTP -i -d -v -s:FTP_CMD.TXT"
Print #1, "Pause"
Print #1, "rd Temp"
Print #1, "Pause"
Close #1

' Crée le fichier de commandes FTP
If Dir(FTP_CMD) <> vbNullString Then
Kill Chemin & FTP_CMD
End If

Open Chemin & FTP_CMD For Output As #1
Print #1, "open"
Print #1, "prod"
Print #1, User
Print #1, Pass
Print #1, "hash"
Print #1, "send fichier.txt 'FICHIER.MAINFRAME'"
Print #1, "bye"
Close #1

ExportBatch = Chemin & Batch
RetBatch = Shell(ExportBatch, vbMaximizedFocus)

' Pour savoir quand le .bat est fini et supprimer les deux fichiers
Do While Dir("Temp", vbDirectory) <> vbNullString
Loop

Kill Chemin & Batch
Kill Chemin & FTP_CMD

1 réponse

Avatar
phil-87.85
sous NT il faut utiliser cmd.exe (et sous d'autres systèmes aussi, sous win
XP çà marche)

exemple d'une commande pour créer un fichier list.txt à partir de la
commande DIR


fichier = "cmd.exe /c DIR ts???*.dbf /OD /B > iste.txt"
Shell (fichier) ' créé le fichier liste.txt contenant les fichier ts*.dbf

je ne sais si ce sera la solution mais un essais ne coute rien

Phil-87.85


pour les paramètres taper "cmd.exe /?"
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

[[/S] [/C | /K] chaîne]



/C Exécute la commande donnée par la chaîne de caractères puis se termine

/K Exécute la commande donnée par la chaîne de caractères puis reste actif

/S Modifie le traitement de la chaîne après /C ou /K (voir ci-dessous)

/Q Exécute (sans interactions) la commande donnée puis reste actif

/D Désactive l'exécution de AutoRun à partir du Registre (voir ci-dessous)

/A Redirige la sortie de commandes internes vers un canal ou un fichier
ANSI

/U Redirige la sortie de commandes internes vers un canal ou un fichier

UNICODE

/T:fg, Change la couleur du premier ou de l'arrière plan (voir aussi COLOR
/?)

/E:ON Active les extensions de commande (voir ci-dessous)

/E:OFF Désactive les extensions de commande (voir ci-dessous)

/F:ON Active les caractères de fin des noms de fichiers et de répertoires

(voir ci-dessous)

/F:OFF Désactive les caractères de fin des noms de fichiers et de
répertoires

(voir ci-dessous)

/V:ON Active l'expansion retardée des variables d'environnement en

utilisant ! comme délimitation.

Par exemple, /V:ON permet à !var! de développer la variable var à

l'exécution. La syntaxe var développe les variables lorsqu'elles
sont

entrées, ce qui est différent lorsque utilisé à l'intérieur d'une

boucle FOR.

/V:OFF Désactive l'expansion retardée des variables d'environnement.



"karghyl" a écrit dans le message de
news:
Bonjour,
j'ai un problème avec une commande shell dans un module vba Access.
En fait j'exécute un .bat qui fait un transfert ftp sur un site
mainframe.
Lorsque je passe la module en débug, ça marche, lorsque j'exécute en
normal, il ne se passe rien, la fenêtre DOS s'ouvre et se ferme
immédiatement, et je n'ai rien de transféré.
Quelqu'un aurait une idée, svp ?
Merci à tous.

pour info, mon bout de code :


' Demande le user et mot de passe de l'utilisateur pour le transfert
ftp
Do Until User <> "" And User <> "user"
User = InputBox("Veuillez saisir votre User pour le système
central", _
"Saisie du user", "User")
Loop
Do Until Pass <> "" And Pass <> "Mot de passe"
Pass = InputBox("Veuillez saisir votre mot de passe pour ce
user", "Saisie du mot de passe", "Mot de passe")
Loop

ChDir (Chemin)

' Crée le fichier .bat
If Dir(Batch) <> vbNullString Then
Kill Chemin & Batch
End If

Open Chemin & Batch For Output As #1
Print #1, "Pause"
Print #1, "cls"
Print #1, "Pause"
Print #1, "mkdir Temp"
Print #1, "Pause"
Print #1, "@FTP -i -d -v -s:FTP_CMD.TXT"
Print #1, "Pause"
Print #1, "rd Temp"
Print #1, "Pause"
Close #1

' Crée le fichier de commandes FTP
If Dir(FTP_CMD) <> vbNullString Then
Kill Chemin & FTP_CMD
End If

Open Chemin & FTP_CMD For Output As #1
Print #1, "open"
Print #1, "prod"
Print #1, User
Print #1, Pass
Print #1, "hash"
Print #1, "send fichier.txt 'FICHIER.MAINFRAME'"
Print #1, "bye"
Close #1

ExportBatch = Chemin & Batch
RetBatch = Shell(ExportBatch, vbMaximizedFocus)

' Pour savoir quand le .bat est fini et supprimer les deux fichiers
Do While Dir("Temp", vbDirectory) <> vbNullString
Loop

Kill Chemin & Batch
Kill Chemin & FTP_CMD