Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 11h08   #1
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Par défaut Exécution d'un fichier batch

Bonjour à tous,

Je souhaiterais exécuter un fichier batch dans une procédure VBA.
Le fichier batch se trouve dans le même répertoire que l'application Access.

Pour l'instant, j'ai ce bout de code:
Code :
1
2
strPath = Application.CurrentProject.Path & "\CopieMensuelle.bat"
varShell = Shell(strPath,1)
Le programme se lance mais ne s'exécute pas correctement.
C'est un script de copie, si je le lance "à la main", la copie s'effectue normalement, par contre, lorsque le script est lancé via Access, aucun fichier n'est copié (pourtant le script se lance, mais ne plante pas).

Quelqu'un aurait-il une idée d'où peut provenir mon problème?

Merci de bien vouloir me venir en aide.

Si besoin, voilà le fichier .bat en question :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
REM ================================================================================
REM Copie automatique des fichiers sources vers le répertoire des fichiers de saisie
REM ================================================================================
 
 
@echo off 
:: format de date à adapter dd/mm/yyyy
set $y=%date:~6,4%
set $s=%date:~3,2%
================================
Set $s=%$s:*0=%
if not defined $s set $s=10
Set /a $s+=1
If %$s% gtr 12 Set /A $s=1,$y+=1
================================
(For /F "tokens=%$s%" %%z In (
 "Janvier Fevrier Mars Avril May Juin Juillet Aout Septembre Octobre Novembre Decembre"
) do (
 mkdir "%$y%\%%z"
 replace -a "Sources\Collecte\*.xls" "%$y%\%%z"
))2>nul
 
pause
Edit : Backslash, project, erreurs d’inattention.
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 12h23   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Un BackSlash te permettra sans doute de corriger ton problème :
Code :
1
2
3
4
strPath = Application.CurrentProject.Path & IIf(Right$(Application.CurrentProject.Path, 1) = "\", "", "\")
strBatchFile = strPath & "CopieMensuelle.bat"
varShell = Shell(strBatchFile, 1)
MsgBox IIf(varShell, "Succès", "Echec"), vbInformation
et d'autre part, Projet s'ecrit Project dans ce cas

Argy

P.S. Un petit Option Explicit serait le bienvenu dans ton en-tête de module.
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 13h11   #3
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Merci de la réponse rapide, mais le problème reste le même.

Le code VBA fonctionne, le script fonctionne, mais les deux ensemble ne veulent pas fonctionner correctement.

Lorsque le script est exécuté par Access, j'obtiens bien la MsgBox "Succès" mais dans l'invite de commande, j'ai le message : "Aucun fichier ajouté".

Je vais continuer à creuser alors.
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 13h43   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Je pense que c'est un problème de dossier en cours.
Quand tu lances le batch à la main, le dossier en cours est celui dans lequel se trouve le fichier .bat.
En revanche avec Shell c'est difficile à prédire.

Il faudrait que tu passes le chemin en paramètre.
Code :
1
2
3
4
5
6
7
8
9
10
strPath = Application.CurrentProject.Path & IIf(Right$(Application.CurrentProject.Path, 1) = "\", "", "\")
strBatchFile = strPath & "CopieMensuelle.bat"
strParam1 = Application.CurrentProject.Path
' si le chemin ne contient pas d'espaces
strCmd = strBatchFile & " " & strParam1
' si le chemin contient des espaces
'strCmd = """" & strBatchFile & """ """ & strParam1 & """"
 
varShell = Shell(strCmd, vbNormalFocus)
MsgBox IIf(varShell, "Succès", "Echec"), vbInformation
En début de ton fichier .bat
Code :
1
2
3
4
5
6
7
8
9
10
@echo off
 
@echo Paramètre 1 : {%1}
 
@echo Dossier en cours :
@cd
 
cd /d %1
@echo Nouveau Dossier en cours :
@cd
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 23h20   #5
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Ça fonctionne parfaitement, merci.
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h33.


 
 
 
 
Partenaires

Hébergement Web