Microsoft 365 lancer une macro excel tous les jour sans ouvrir le fichier

phiolc24

XLDnaute Nouveau
Bonjour, j'ai un fichier excel sur le drive de mon entreprise contenant une macro ( mise à jour d'un tableau croisé dynamique et un copier coller). J'aimerai que cette macro s'execute tous les jours seule, sans que j'ai a ouvrir le fichier. En effet l'excel est relier a un powerBi qui se met a jour seul tous les jour

Merci de votre aide
 

wDog66

XLDnaute Occasionnel
Bonjour,

C'est impossible de lancer une macro sans ouvrir le fichier 🙄

En revanche vous pouvez créer une tâche Windows qui lancera le fichier, il suffit ensuite de lancer la macro à l'ouverture avec l'évènement Workbook_Open() dans ThsiWorkbook, puis de le refermer

Ca demande également que le PC ne soit jamais éteint !

Sinon regardez peut-être dans Office Script si on ne peut pas faire une mise à jour d'un TCD
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Un Application.OnTime Heure, Procédure ouvre le fichier si nécessaire. Beaucoup se sont retrouvés avec des classeur qu'ils ne pouvaient plus fermer à cause de cette méthode invoquée en boucle et non neutralisée par Application.OnTime Heure, Procédure, Schedule:=False. Une commande personnalisée de menu ou un OnAction de Shape aussi, ouvre le classeur contenant la macro.
 

jack guilliod

XLDnaute Nouveau
Bonjour,

Effectivement, il n'est pas possible de lancer une macro si le fichier n'est pas ouvert, c'est là qu'intervient Excel Script en fonction de votre version d'office (onglet Automate) qui permet d'exécuter certains codes sans que le fichier soit ouvert. Et de programmer l'exécution de ce Script via Power Automate.
 

Apache007

XLDnaute Nouveau
Bonjour,

Sans ouvrir le fichier je ne vois pas.

Moi je lancerai un script Vbs dans le gestionnaire des tâches qui ouvrirai le fichier Excel en gardant Excel invisible. Dans le fichier Excel à l'ouverture, rafraichir le TCD et quitter Excel dans le Vbs.
Créer une instance Excel dans Vbs avec:

VB:
Dim Vo_AppExcel
Dim Vo_WrkBook

Set Vo_AppExcel = Wscript.CreateObject("Excel.Application")
Set Vo_WrkBook = Vo_AppExcel.Workbooks.open(Le_Fichier)
...
...
...
Wscript.Sleep 1000
Vo_AppExcel.Quit
Set Vo_AppExcel =Nothing
Wscript.quit
 

patricktoulon

XLDnaute Barbatruc
juste en passant
un petit exemple comment inscrire une tache par vba
VB:
'------------------------------------------------------------------
' cet exemple te montre comment programer une tache planifiée avec l'object "Schedule.Service" en late binding
'À partir du moment où la tâche est enregistrée.
'------------------------------------------------------------------
Sub TEST_SHREDULER()


'constante qui spécifie un déclencheur basé sur le temps.
Const TriggerTypeTime = 1
' constante qui spécifie une action exécutable
.Const ActionTypeExec = 0


'********************************************************
'Céation  l'objet TaskService
.Set service = CreateObject("Schedule.Service")
Call service.Connect

'********************************************************
'obtention d' un dossier pour créer une définition de tâche dans.
Dim rootFolder
Set rootFolder = service.GetFolder("\")

'La variable taskDefinition est l'objet TaskDefinition.
Dim taskDefinition
'Le paramètre flags est 0 car il n'est pas pris en charge.
Set taskDefinition = service.NewTask(0)

'********************************************************
'Définir des informations sur la tâche.
'Définissez les informations d'inscription pour la tâche par
'Création de l'objet RegistrationInfo.
Dim regInfo
Set regInfo = taskDefinition.RegistrationInfo
regInfo.Description = "demarrer le bloc-notes à un certain moment"
regInfo.Author = "Patrick"

'********************************************************
'Définir le principal de la tâche
Dim principal
Set principal = taskDefinition.principal

'Définissez le type de connexion à la connexion interactive
principal.LogonType = 3


' Définissez l'information de réglage de la tâche pour le planificateur de tâches par
'Création d'un objet TaskSettings.
Dim settings
Set settings = taskDefinition.settings
settings.Enabled = True
settings.StartWhenAvailable = True
settings.Hidden = False

'********************************************************
' Créez un déclencheur basé sur le temps.
Dim triggers
Set triggers = taskDefinition.triggers

Dim trigger
Set trigger = triggers.Create(TriggerTypeTime)

' les variables qui définissent quand le déclencheur est actif.
Dim startTime, endTime
'exemple
Dim time
time = DateAdd("s", 30, Now)  'start time = 30 secondes a partir de maintenant
startTime = XmlTime(time)
'selon les disponibilité du PC la tache demarrera entre ces deux moments
time = DateAdd("s", 60, Now) 'end time = 60 secondes a partir de maintenant
endTime = XmlTime(time)

MsgBox "startTime :" & startTime
MsgBox "endTime :" & endTime

trigger.StartBoundary = startTime
trigger.EndBoundary = endTime
trigger.ExecutionTimeLimit = "PT5M"    '5 minutes de delay
trigger.ID = "TimeTriggerId"
trigger.Enabled = True

'***********************************************************
' Création  l'action pour la tâche à exécuter.
' Ajoutez une action à la tâche pour exécuter notepad.exe.
Dim Action
Set Action = taskDefinition.Actions.Create(ActionTypeExec)
Action.Path = "C:\Windows\System32\notepad.exe"

MsgBox "Création de la définition de la tâche. À propos de soumettre la tâche ..."

'***********************************************************
'Enregistrez (créer) la tâche.
Call rootFolder.RegisterTaskDefinition( _
    "Test TimeTrigger", taskDefinition, 6, , , 3)

MsgBox "Tâche soumise."
End Sub


'------------------------------------------------------------------
'la fonction qui suit sert a mettre le format date heure minutes secondes au format pour le shreduler
' Utilisé pour obtenir le temps pour le déclencheur
' startBoundary and endBoundary.la fonction sera utilisé deux fois pour le starttimeet endtime
' Renvoie l'heure dans le format correct:
' exemple :YYYY-MM-DDTHH:MM:SS.
'------------------------------------------------------------------
Function XmlTime(t)
    Dim cSecond, cMinute, CHour, cDay, cMonth, cYear, tTime, tDate
        cSecond = "0" & Second(t)
    cMinute = "0" & Minute(t)
    CHour = "0" & Hour(t)
    cDay = "0" & Day(t)
    cMonth = "0" & Month(t)
    cYear = Year(t)
    tTime = Right(CHour, 2) & ":" & Right(cMinute, 2) & ":" & Right(cSecond, 2)
    tDate = cYear & "-" & Right(cMonth, 2) & "-" & Right(cDay, 2)
    XmlTime = tDate & "T" & tTime
End Function
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 087
Membres
112 656
dernier inscrit
VNVT