IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Oliv-

Programmer le lancement d'une Macro à une heure/ récurrence donnée.

Noter ce billet
par , 31/12/2020 à 15h47 (1253 Affichages)
Dans Outlook il n'y a pas de Scheduler comme application_ontime() pour Excel.

Et on ne peut pas non plus lancer une macro comme dans EXCEL avec application.run

Plusieurs solutions existent cependant.

Soit votre macro peut être lancée totalement via un VBS.

voici quelques liens non exhaustifs vers des tuto VB SCRIPT.
https://tahe.developpez.com/web/vbscript/
https://vb.developpez.com/faq/vbs

-->Vous programmez le planificateur de tâches de Windows (gestionnaire de tâches) , en lui demandant d'exécuter le VBS demandé.

Nom : tache_1.JPG
Affichages : 402
Taille : 42,7 Ko
Nom : TACHE_2.JPG
Affichages : 358
Taille : 37,1 Ko
Nom : tache_3.JPG
Affichages : 350
Taille : 34,1 Ko
Nom : tache_4.JPG
Affichages : 360
Taille : 34,5 Ko
Nom : tache_5.JPG
Affichages : 370
Taille : 37,9 Ko
Nom : tache_6.JPG
Affichages : 360
Taille : 48,9 Ko

L'avantage de cette méthode c'est que vous pouvez aussi lancer Outlook s'il n'est pas démarré.

Soit vous voulez ou devez lancer une macro qui se trouve dans OUTLOOK.

2 Méthodes pour cela

Dans celles-ci on va prendre pour exemple ce traitement

Dans OUTLOOK, ouvrez les macros avec alt+F11 et créez un module se nommant MonModule

Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Sub maMacro()
'ici on fait le traitement programmé souhaité.
    Dim myfolder
    Set myfolder = Session.GetDefaultFolder(olFolderInbox)
 
    MsgBox myfolder.FullFolderPath & vbCr & myfolder.Items.Count
End Sub

--> Vous utilisez le planificateur de tâche et un VBS qui va envoyer un Email , envoi que vous allez intercepter pour lancer votre macro.

Exemple de VBS (les SendKeys ("{ESC}") servent à fermer un menu qui serait ouvert et qui empêcherai le lancement

Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
On Error Resume Next
Set oShell = CreateObject("WScript.Shell")
tries=0
Err.Clear
Do
	Set Ol = GetObject(, "outlook.application")
	If Err then
		WScript.Sleep(500)
		Err.Clear
	Else
		Exit Do
	End If
	tries= tries +1
Loop While tries<5 
If Ol Is Nothing Then
   wscript.Quit(99)
Else
	Set Olt = Ol.CreateItem(0)
	Olt.Subject = "#SCHEDULE#SENT"
	Olt.to = "test@toto.fr"
	Err.Clear
	Do 
		if Err.Number <> 0 then 
			WScript.Sleep(500)
			oShell.SendKeys ("{ESC}")
		end if
		Err.Clear
		Olt.display
		j = j + 1
	 Loop until Err.Number = 0 or j=5
	Olt.send
End if
wscript.Quit(1)

Dans OUTLOOK, ouvrez les macros avec alt+F11 dans ThisOutlookSession et copiez le code suivant

'ici on utilise l'événement Application_ItemSend pour INTERCEPTER le mail envoyé et vérifier si c'est le GO pour notre traitement.

Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean)
 
    If Not item.Class = olMail Then Exit Sub
 
    'ICI on TEST si c'est un LANCEMENT envoyé par VBS
    If InStr(1, item.SUBJECT, "#SCHEDULE#SENT", vbTextCompare) > 0 Then
        DoEvents
 
            Call monmodule.mamacro'...your macro name here
'on annule l'envoi 
        Cancel = True
        DoEvents
'on supprime cet Email
       item.delete
        Exit Sub
    End If
END SUB


l'avantage de cette méthode c'est qu'un programme externe peut être le lanceur (comme une macro Excel ou Word).

-->L'autre méthode c'est d'utiliser les RAPPELS de OUTLOOK , que l'on va intercepter lors de son affichage pour lancer le traitement de notre choix.

L'inconvénient de cette méthode c'est que OUTLOOK doit être démarré, (attention aussi si vous avez une appli mobile )

Dans OUTLOOK, ouvrez les macros avec alt+F11 dans ThisOutlookSession copiez ce code :

Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
' The Private subs go in ThisOutlookSession
Private WithEvents olRemind As Outlook.Reminders
 
 
Private Sub Application_Reminder(ByVal Item As Object)
'Juste avant l'affichage du RAPPEL on teste si c'est notre GO
    If InStr(1, Item.Subject, "#SCHEDULE#SENT", vbTextCompare) > 0 Then
    'SI OUI 
    'ON PEUT SUPPRIMER l'affichage de ce rappel
        Set olRemind = Outlook.Reminders
 
        DoEvents
        'ON LANCE NOTRE TRAITEMENT
        Call MonModule.maMacro    '...your macro name here
    End If
End Sub
 
 
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)
'---------------------------------------------------------------------------------------
' Procedure : olRemind_BeforeReminderShow
' Author    : Diane Poremsky
' Date      : 30/12/2020
' Reference : https://www.slipstick.com/developer/code-samples/running-outlook-macros-schedule/
' Purpose   : dismiss reminder
'---------------------------------------------------------------------------------------
     Dim varTime As Variant
    For Each objRem In olRemind
        If InStr(1, objRem.Caption, "#SCHEDULE", vbTextCompare) > 0 Then
            If objRem.IsVisible Then
                objRem.Dismiss
                'pour relancer le traitement dans 1 mn on remplace Dismiss par Snooze
                ' objRem.Snooze (1)
                Cancel = True
            End If
            Exit For
        End If
    Next objRem
End Sub

Dans Outlook créez une TACHE (fonctionne aussi avec un rdv ou un Rappel sur un Email)

L'important c'est de le nommer "#SCHEDULE#SENT" ou du moins que le sujet contienne ce texte .

Indiquez bien la date de rappel !! Vous pouvez aussi paramétrer un PERIODICITE

Nom : tache_ol_1.JPG
Affichages : 339
Taille : 73,8 Ko

Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Viadeo Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Twitter Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Google Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Facebook Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Digg Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Delicious Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog MySpace Envoyer le billet « Programmer le lancement d'une Macro à une heure/ récurrence donnée. » dans le blog Yahoo

Mis à jour 01/01/2021 à 16h52 par Oliv-

Catégories
Programmation , vba outlook

Commentaires

  1. Avatar de Pierre Fauconnier
    • |
    • permalink
    Chouette idée que ce billet de blog...

    Merci Oliv pour cette technique