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
Mieux vaut utiliser un vbs comme vous l’avez indiqué
vbs
, qui est un fichier texte avec une extension .vbs (voir exemple de code ci-dessous)vbs
vbs
pour ouvrir la workbook
à l’heure prévue, puis entrez: Private Sub Workbook_Open()
dans le module ThisWorkbook
pour exécuter le code lorsque le fichier est ouvertApplication.Run
dans vbs
pour exécuter la macroVoir 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
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"
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)
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.
Trois étapes importantes - Procédure: planifier un fichier Excel.xls (m)
simplement :
PLUS EN DÉTAIL...
`
' 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
'
`
set Programme/script: = C:\Windows\System32\cscript.exe
set Ajouter des arguments (facultatif): = C:\MyVbsFile.vbs
Cela devrait fonctionner.
Faites le moi savoir!
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.