Bonjour,
Je travaille avec Access depuis maintenant plusieurs semaines et j'ai remarqué quelques désagréments lors de l'envoi d'emails en passant par Outlook.
Avec la plupart des codes génériques que l'on trouve sur internet (FAQ comprise) l'envoi se déroule très bien avec .Send lorsque Outlook est déjà ouvert.
Cependant lorsqu'il est fermé au début de l'execution du code .Send provoque l'erreur 287.
La parade est d'appeler .Display juste avant qui va pouvoir règler le problème
L'inconvénient de cette méthode est que le .Display affiche la fenêtre quelque millisecondes (estétique bof) et que j'ai l'impression que dans certains cas (à confirmer) que le message fini dans la boite d'envoi sans être envoyé lorsque Outlook est fermé.
Code : 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 Public Sub sendEmail(addrEmail As String, sujetEmail As String, txtEmail As String) ' méthode qui envoie des email de confirmation On Error GoTo Erreur Dim strHTML As String Dim oEmail As Outlook.MailItem Dim appOutlook As Outlook.Application Set appOutlook = CreateObject("Outlook.Application") Set oEmail = appOutlook.CreateItem(olMailItem) strHTML = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" & _ "<HTML><HEAD>" & _ "<META http-equiv=Content-Type content=""text/html; charset=iso-8859-1"">" & _ "<META content=""MSHTML 6.00.2800.1516"" name=GENERATOR></HEAD>" & _ "<BODY><DIV STYLE=""font-size: 15px; font-face: Calibri;"">" With oEmail .To = addrEmail .CC = email_QUA .HTMLBody = strHTML & Replace(txtEmail, Chr(10), "<br>") & "</DIV></BODY></HTML>" .Subject = sujetEmail .Display .Send End With Sortie: Set oEmail = Nothing Set appOutlook = Nothing Exit Sub Erreur: MsgBox "Erreur lors de l'envoi de l'email", vbExlamation, "Erreur N°" & err.Number Resume Sortie End Sub
Une ébauche de parade serait d'appeler l'ouverture du programme si outlook est fermé, on se passe du .Display
On rajoute au début du code précédent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 If ctrOpenOutlook = False Then Call Shell("OUTLOOK.EXE", 6) 'l'argument 6 minimise normalement la fenêtre à l'ouverture With GetObject(, "Outlook.Application") .ActiveWindow.WindowState = 1 ' olMinimized = 1 End With End IfMalheuresement c'est assez bancale car le temps que la fenêtre s'ouvre (malgré tout en grand écran) le code VBA continue à s'executer et plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Function ctrOpenOutlook() As Boolean Dim Appli As Object On Error Resume Next Set Appli = GetObject(, "Outlook.Application") If Appli Is Nothing Then ctrOpenOutlook = False Else ctrOpenOutlook = True End If End Function
Je tenais à capter votre attention sur cette limitation, si vous avez des idées d'amélioration n'hésitez pas![]()
Partager