hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 2009
-
11 févr. 2009 à 11:18
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 2009
-
11 févr. 2009 à 14:28
Bonjour à toute la communauté,
j'aurai une question concernant le couple Batch / Macro Vba.
Le contexte est assez simple ... quoi que tordu mais bon on ne discute pas les choix d'un client ... enfin on peut toujours en discuter mais vu qu'il a toujours raison même quand il a tort (-.-')
Voilà mon soucis, j'ai du développer une macro Vba, permettant à partir d'extraction de donnée d'un SI, mettre à jour une BD Access pour un autre SI (du bonheur). Cette macro est un fichier Excel permettant au client de saisir les règles de transformation des données et suivre les tables de correspondance entre les 2 systemes.
Jusqu'ici rien de bien bien compliqué, un classique de l'utilisation Vba sur des méthodo de SI.
Non là où ça se gate c'est que cette macro doit pouvoir être lancé manuellement de temps en temps ou sur demande spécifique mais aussi de façon périodique (tous les jours à 2 h du mat)
Dans cette macro, je possède un module Main et plusieurs procédures.
Je me suis donc orienté sur un batch qui sera lancé par tache planifié sur le serveur.
Mon soucis est de lancer la procédure que je souhaite à partir de ce batch .... j'arrive à lancer Excel sans soucis mais j'aimerai bien pouvoir lancer directement la procédure. Voici le code mis en place :
@ECHO OFF
REM ========================================
REM
REM
REM ========================================
REM Rafraîchir l'écran...
CLS
ECHO.
TITLE [Tentive de lancement d'une macro InjecteurOrcad]
REM On cherche et on detruit les applications excel lancer
REM Mais pkoi est il aussi méchant ... parce que parce que !!
TaskList | findstr /c:excel.exe > nul
If ErrorLevel 0 Taskkill /IM excel.exe
REM Tente de lancer le service...
START excel.exe "monfichier.xlsm"
REM Teste le lancement du fichier excel
IF ErrorLevel 1 GOTO ErreurLancement
REM on est bon
ECHO [%Date% - %Time%] - SUCCES - Démarrage de la macro. >> Log.txt
GOTO End
:ErreurLancement
REM Echec du lancement
ECHO [%Date% - %Time%] - ERREUR - Démarrage de la macro. >> Log.txt
GOTO End
:End
Et là bien sur j'ai tenté de faire un petit START excel.exe "monfichier.xlsm!Main.P_Main()" mais bien sur ça ne fonctionne pas . comment peut on faire pour lancer cette macro directement sans passer par les options du openform ou du workbook_open
.... il est possible aussi que ce post ne soit pas dans la bonne section ... mais je voyais pas trop où le placer
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 11 févr. 2009 à 11:28
Bonjour,
Juste une idée en passant, n'ayant pas approfondi la question.
Ne pourrais-tu pas récupérer un paramètre dans ton WorkBook, celui-ci étant lancé par ta ligne de commande.
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 20091 11 févr. 2009 à 14:14
Ok alors à ma surprise j'ai opté pour la solution de Calade ^^
En effet il est possible de passer des options lors de la demande de lancement de Excel voici le code du batch dans un premier temps
@ECHO OFF
REM ========================================
REM
REM
REM ========================================
REM Rafraîchir l'écran...
CLS
ECHO.
TITLE [Tentive de lancement d'une macro InjecteurOrcad]
REM On cherche et on detruit les applications excel lancer
REM Mais pkoi est il aussi méchant ... parce que parce que !!
TaskList | findstr /c:excel.exe > nul
If ErrorLevel 0 Taskkill /IM excel.exe
REM Tente de lancer le service...
START excel.exe /e/automate "monfichier.xlsm"
REM Teste le lancement du fichier excel
IF ErrorLevel 1 GOTO ErreurLancement
REM on est bon
ECHO [%Date% - %Time%] - SUCCES - Démarrage de la macro. >> Log.txt
GOTO End
:ErreurLancement
REM Echec du lancement
ECHO [%Date% - %Time%] - ERREUR - Démarrage de la macro. >> Log.txt
GOTO End
:End
Ensuite il suffit de faire un test lors de l'ouverture du Woorkbook ... ici c'est la partie qui me frustre ... mais bon faut savoir accepter sa défaite ... Voici donc le code placé du coté du fichier Excel
Private Declare Function GetCommandLine _
Lib "kernel32" Alias "GetCommandLineA" _
() As Long
Private Declare Function lstrlen _
Lib "kernel32" Alias "lstrlenA" _
(lpString As Any) As Long
Private Declare Function lstrcpy _
Lib "kernel32" Alias "lstrcpyA" _
(lpString1 As Any, lpString2 As Any) As Long
' On regarde si cela fur ouvert par le batch
Public Sub Workbook_Open()
Dim CmdLine As String 'Ligne de Commande
Dim CmdArgs() As String 'Tableau des paramétres de Commande
CmdLine = GetCmd 'Lire la ligne de Commande
If CmdLine = "" Then
Exit Sub
End If
If InStr(1, CmdLine, "/e/automate") <> 0 Then
Call P_Main
End If
End Sub
Private Function GetCmd() As String 'Tony Proctor microsoft.public.vb.winapi
Dim lpCmd As Long
lpCmd = GetCommandLine()
GetCmd = Space$(lstrlen(ByVal lpCmd))
lstrcpy ByVal GetCmd, ByVal lpCmd
End Function
Voilà ici c'est sur c'est pas optimal mais j'approche des deads lines ... donc on vera si j'ai le temps d'ameliorer ça plus tard
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 20091 11 févr. 2009 à 11:42
Genre une procédure lancé a l'ouverture du WB faisant un test sur les parametres et si pas de paramètre alors manuel sinon lancement de ma procédure
le problème reste sur le passage de paramètre... j'arrive déjà pas à lancer une macro alors faire passer des paramètres directement à Excel je vois pas trop comment faire
mamash_bek
Messages postés20Date d'inscriptionmercredi 6 juin 2007StatutMembreDernière intervention11 juin 20091 11 févr. 2009 à 12:52
Je vais peut être dire une bêtise mais en faisant un public sub auto_open() dans ton module cela t'offre la possibilité à l'ouverture de ton doc de faire une série de test
par exemple analyser les données présentes dans un fichier *.log que ton script aura au préalable créé et contenant tes paramétres
Vous n’avez pas trouvé la réponse que vous recherchez ?
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 20091 11 févr. 2009 à 13:52
Hey même si la méthode n'est pas vraiment la plus optimale (j'arrive pas à croire qu'on ne soit pas capable de lancer ces macros directement ... ) je risque de devoir gérer la possibilité que mon test de la macro soit lancé avant l'écriture dans le fichier log ... de plus ça me demande une lecture d'un fichier ... rapide quand il est petit mais prendra de plus en plus de temps quand ton log aura 2 ans
Je jette un oeil sur d'autres méthodes mais sinon ca sera pour l'option que tu m'as proposé
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 11 févr. 2009 à 14:24
Re bonjour,
Je crois que j'ai pas été assez explicite, mais c'est exactement ce que je voulais dire. Récupérer le paramètre lancé depuis ton batch lors de la l'ouverture de ton workbook et de là tu lances ou non ta macro.
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 20091 11 févr. 2009 à 14:28
Oui Calade je l'avais bien compris comme ça mais le problème que j'avais à la base était de faire comprendre au batch que je voulais faire passer des paramètres mais que j'ai trouvé c'est tout bon ^^