Exécution d'une macro à partir d'un .bat

Bonjour,

A intervalles régulier, je dois exécuter une macro à partir d'un fichier externe (.bat).

Cette macro ouvre Excel, exécute la macro (envoi d"un Email) et referme Excel.

Cette macro ne doit être exécutée QUE à partir du .bat sinon, comme elle referme le fichier sans intervention, je n'ai plus accès à mon fichier.

Merci pour vos lumières.

bonjour,

Cette macro ne doit être exécutée QUE à partir du .bat sinon, comme elle referme le fichier sans intervention, je n'ai plus accès à mon fichier.

je ne comprends pas le lien entre "fermer le fichier sans intervention" et "plus d'accès à mon fichier". Mais une piste pourrait être de mettre la macro dans un autre fichier excel, voire dans un script vbs.

Je n'ai pas dû être clair. Je recommence en détail.

J'exécute un fichier de cmd "execution.bat" en DOS dans lequel se trouve les commandes suivantes :

Excel.exe "Action a prendre.xlsm"

Je vais avoir une feuille Excel ouverte. OK.

Si j'ai pris soin de mettre dans "ThisWorkBook" :

Private Sub Workbook_open()

Ma macro

End Sub

A chaque ouverture de la feuille Excel, il va exécuter la "Ma macro". Jusque là, c'est ok.

Mais ma macro fait un contrôle, éventuellement envoie un Email et ferme Excel.

Donc, à chaque fois que j'accède à ce fichier, se lance automatiquement "Ma macro" qui, en se terminant, ferme Excel. Je n'ai donc plus accès au fichier pour en modifier les données, par exemple.

Idéalement, il faudrait pouvoir faire une différence entre un accès via ".bat" qui exécute automatiquement la macro et un accès manuel qui n'exécute pas la macro. Donc passer un paramètre à Excel via ".bat".

Possible ?

Pierre.

Bonsoir,

dans ce cas, je te conseille d'avoir un fichier excel séparé qui contient cette macro

la macro ouvre ton fichier excel, fait les controles et l'envoi, et puis ferme le fichier.

comme la macro n'est pas dans ton fichier, tu pourras l'ouvrir sans interférence.

Bonjour...

sinon une autre façon de faire... personnellement sur un fichier j'utilise un script VBS mais on peut probablement le lancer par un .bat... en faisant dans le bat

Cscript monscript.vbs

j'ai une sub VBs : qui me permet de lancer d'ouvrir le fichier excel fourni en parametre et qui lance une sub VBA spécifique (lancement_script pour cet exemple) qui se trouve dans un module... avec en prime j'ai un nom fichier passé en argument à sub VBA (extract_file)

Donc pour le VBS : la sub

sub ouvrir_excel(Fich_xlsm)
    dim objExcel,objWorkbook
    'creation d'un objet excel 
    Set objExcel = CreateObject("Excel.Application" )
    'creation d'un objet fichier excel en référence au fichier a ouvrir
    Set objWorkbook = objExcel.Workbooks.Open(Fich_xlsm) 
    'rend invisible l'application excel
    objExcel.Visible = false
    'lance la macro du fichier excel avec passage en argument
    objExcel.run "lancement_script", (extract_file)
    'ferme le fichier
    objWorkbook.close
    'quite l'application
    objExcel.application.quit
end sub

avec un appel dans le VBS du type :

'ouverture du fichier excel et execution de la macro vbA
    ouvrir_excel(path & Fic_Excel)

Dans mon fichier VBA :

Option Explicit
Public fichier_texte As String

Sub lancement_script(file As String)
fichier_texte = ActiveWorkbook.Path & file
prog_principal
End Sub

Ce qui évite d'avoir quelque chose dans le Thisworkbook qui s'exécuter à chaque ouverture du fichier...

Je ne sais pas si cela peut aider

Fred

bonsoir

il y a une solution bien plus propre pour ça

tu a l'events workbook_open oui !! mais tu en a un autre beaucoup moins connu qui ne figure pas dans la liste des events

cet évent est une sub a mettre dans un module en fait

fait une recherche de la sub "Sub Auto_Open() "et la différence de comportement avec workbook_open

Rechercher des sujets similaires à "execution macro partir bat"