web-dev-qa-db-fra.com

Comment définir une planification récurrente pour un fichier xlsm à l'aide du Planificateur de tâches Windows

J'ai un fichier xlsx activé par macro. Comment puis-je le définir dans le gestionnaire de tâches afin que chaque jour, à 9 heures, le gestionnaire de tâches ouvre le classeur, déclenche la macro et le ferme.

Jusqu'à présent, j'utilise 

Application.OnTime . . .

Mais je me rends compte que garder le fichier xlsm ouvert est gênant 

8
Andrei Vasilev

Mieux vaut utiliser un vbs comme vous l’avez indiqué

  1. Créez une simple vbs, qui est un fichier texte avec une extension .vbs (voir exemple de code ci-dessous)
  2. Utilisez le planificateur de tâches pour exécuter la variable vbs
  3. Utilisez la vbs pour ouvrir la workbook à l’heure prévue, puis entrez:
    • utilisez l'événement Private Sub Workbook_Open() dans le module ThisWorkbook pour exécuter le code lorsque le fichier est ouvert
    • de manière plus robuste (car les macros peuvent être désactivées à l’ouverture), utilisez Application.Run dans vbs pour exécuter la macro

Voir cet exemple de la dernière approche à Exécuter Excel sur le Planificateur de tâches Windows

sample vbs 

Dim ObjExcel, ObjWB
Set ObjExcel = CreateObject("Excel.application")
'vbs opens a file specified by the path below
Set ObjWB = ObjExcel.Workbooks.Open("C:\temp\rod.xlsm")
'either use the Workbook Open event (if macros are enabled), or Application.Run

ObjWB.Close False
ObjExcel.Quit
Set ObjExcel = Nothing
11
brettdj

Je me suis référé à un blog par Kim pour faire cela et ça fonctionne très bien pour moi. Voir le blog

L'exécution automatisée de la macro peut être accomplie à l'aide d'un fichier de script VB qui est appelé par le Planificateur de tâches Windows à des moments spécifiés. 

N'oubliez pas de remplacer "YourWorkbook" par le nom du classeur que vous souhaitez ouvrir et de remplacer "YourMacro" par le nom de la macro que vous souhaitez exécuter.

Voir le fichier de script VB (juste nommé RunExcel.VBS):

    ' Create a WshShell to get the current directory
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application") 

' Disable Excel UI elements
myExcelWorker.DisplayAlerts = False
myExcelWorker.AskToUpdateLinks = False
myExcelWorker.AlertBeforeOverwriting = False
myExcelWorker.FeatureInstall = msoFeatureInstallNone

' Tell Excel what the current working directory is 
' (otherwise it can't find the files)
Dim strSaveDefaultPath
Dim strPath
strSaveDefaultPath = myExcelWorker.DefaultFilePath
strPath = WshShell.CurrentDirectory
myExcelWorker.DefaultFilePath = strPath

' Open the Workbook specified on the command-line 
Dim oWorkBook
Dim strWorkerWB
strWorkerWB = strPath & "\YourWorkbook.xls"

Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB)

' Build the macro name with the full path to the workbook
Dim strMacroName
strMacroName = "'" & strPath & "\YourWorkbook" & "!Sheet1.YourMacro"
on error resume next 
   ' Run the calculation macro
   myExcelWorker.Run strMacroName
   if err.number <> 0 Then
      ' Error occurred - just close it down.
   End If
   err.clear
on error goto 0 

oWorkBook.Save 

myExcelWorker.DefaultFilePath = strSaveDefaultPath

' Clean up and shut down
Set oWorkBook = Nothing

' Don’t Quit() Excel if there are other Excel instances 
' running, Quit() will shut those down also
if myExcelWorker.Workbooks.Count = 0 Then
   myExcelWorker.Quit
End If

Set myExcelWorker = Nothing
Set WshShell = Nothing

Vous pouvez tester ce script VB à partir de l'invite de commande:

>> cscript.exe RunExcel.VBS

Une fois que le fichier de script VB et le classeur ont été testés de manière à obtenir le résultat souhaité, vous pouvez utiliser le planificateur de tâches Microsoft (Panneau de configuration-> Outils d'administration -> Planificateur de tâches) pour exécuter 'cscript.exe RunExcel. VBS est automatiquement pour vous.

Veuillez noter que le chemin de la macro doit être au format correct et entre guillemets simples, comme suit:

strMacroName = "'" & strPath & "\YourWorkBook.xlsm'" & 
"!ModuleName.MacroName"
4
rchacko

Code ci-dessous copié de -> Ici

Tout d'abord, vous devez enregistrer votre classeur en tant que classeur activé pour les macros. Donc, il faudrait que xlsm ne soit pas xlsx. Sinon, Excel désactivera la macro car elle n'est pas activée. 

Définissez votre vbscript (C:\Excel\tester.vbs). L'exemple sous "test ()" doit être situé dans vos modules sur le document Excel. 

dim eApp
set eApp = GetObject("C:\Excel\tester.xlsm")
eApp.Application.Run "tester.xlsm!test"
set eApp = nothing

Puis définissez votre horaire, donnez-lui un nom et un nom d'utilisateur/mot de passe pour un accès hors connexion. 

Ensuite, vous devez définir vos actions et vos déclencheurs. 

Définissez votre horaire (déclencheur)

Set your trigger

Action, configurez votre vbscript pour s’ouvrir avec Cscript.exe afin qu’il soit exécuté en arrière-plan et ne soit pas bloqué par une erreur de gestion que vbcript a activée.

Action Properties

3
Rich

Trois étapes importantes - Procédure: planifier un fichier Excel.xls (m)

simplement :

  1. assurez-vous que le fichier .vbs est correct
  2. définir correctement l'onglet Action dans le Planificateur de tâches 
  3. ne pas activer "Exécuter si l'utilisateur est connecté ou non"

PLUS EN DÉTAIL...

  1. Voici un exemple de fichier .vbs :

`

'   a .vbs file is just a text file containing visual basic code that has the extension renamed from .txt  to .vbs

'Write Excel.xls  Sheet's full path here
strPath = "C:\RodsData.xlsm" 

'Write the macro name - could try including module name
strMacro = "Update" '    "Sheet1.Macro2" 

'Create an Excel instance and set visibility of the instance
Set objApp = CreateObject("Excel.Application") 
objApp.Visible = True   '   or False 

'Open workbook; Run Macro; Save Workbook with changes; Close; Quit Excel
Set wbToRun = objApp.Workbooks.Open(strPath) 
objApp.Run strMacro     '   wbToRun.Name & "!" & strMacro 
wbToRun.Save 
wbToRun.Close 
objApp.Quit 

'Leaves an onscreen message!
MsgBox strPath & " " & strMacro & " macro and .vbs successfully completed!",         vbInformation 
'

`

  1. Dans l'onglet Action (Planificateur de tâches) :

set Programme/script: = C:\Windows\System32\cscript.exe

set Ajouter des arguments (facultatif): = C:\MyVbsFile.vbs

  1. Enfin, n'activez pas "Exécuter si l'utilisateur est connecté ou non" .

Cela devrait fonctionner.

Faites le moi savoir!

Rod Bowen

2
Rod Bowen

J'ai trouvé un moyen beaucoup plus facile et j'espère que cela fonctionne pour vous. (sous Windows 10 et Excel 2016)

Créez un nouveau module et entrez le code suivant: Sub auto_open () 'Macro à exécuter (ne doit pas obligatoirement figurer dans ce module, mais uniquement dans ce classeur End Sub

Configurez une tâche via le planificateur de tâches et définissez le "programme à exécuter en tant que" Excel (trouvé dans C:\Program Files (x86)\Microsoft Office\root\Office16). Définissez ensuite le paramètre "Ajouter des arguments (facultatif): en tant que chemin d'accès au classeur prenant en charge les macros. N'oubliez pas que le chemin d'accès à Excel et le chemin d'accès au classeur doivent être entre guillemets.

* Voir l'exemple de Rich, édité par la communauté, pour une image de l'écran du planificateur Windows.

0
Justin