Batch / Macro Vba [Résolu]

hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention - 11 févr. 2009 à 11:18 - Dernière réponse : hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention
- 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

Merci pour votre aide.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 11 févr. 2009 à 11:28
3
Merci
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.

En espérant pouvoir t'aider.

Calade

Merci Calade 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Calade
Meilleure réponse
hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention - 11 févr. 2009 à 14:14
3
Merci
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

Merci à tous pour vos idées

Merci hebus16 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de hebus16
hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention - 11 févr. 2009 à 11:42
0
Merci
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
Commenter la réponse de hebus16
mamash_bek 20 Messages postés mercredi 6 juin 2007Date d'inscription 11 juin 2009 Dernière intervention - 11 févr. 2009 à 12:52
0
Merci
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
Commenter la réponse de mamash_bek
hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention - 11 févr. 2009 à 13:52
0
Merci
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é
Commenter la réponse de hebus16
Calade 1212 Messages postés dimanche 20 avril 2003Date d'inscription 4 juin 2016 Dernière intervention - 11 févr. 2009 à 14:24
0
Merci
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.

Calade
Commenter la réponse de Calade
hebus16 80 Messages postés vendredi 14 mai 2004Date d'inscription 2 octobre 2009 Dernière intervention - 11 févr. 2009 à 14:28
0
Merci
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 ^^
Commenter la réponse de hebus16

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.