Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Envoi mail à partir de vba excel : "Cette tâche a été annulée avant d'être

1 réponse
Avatar
Gadget
Bonjour.
J'envoi à partir du VBA excel des mail grâce à une liaison précoce sur
Outlook.

Voici le code (récupéré là :
http://officeassistant.ibelgique.com/excel_vba.html?3&weborama=30#Send_mail_Outlook )

Sub SendMail_Outlook()
'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools /
Reference / Cocher "Microsoft 'Outlook Library"
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = moi@domaine.fr
.Subject = "Test"
.Body = "Contenu s " & vbLf & "deuxième linge"
.Attachments.Add "c:\test1.TXT"
.Attachments.Add "c:\test2.TXT"
.Send '.display
'On peut switcher entre .send et .display selon que l'on veut envoyer le
mail (send) ou seulement le préparer 'et le vérifier(display)
End With
End Sub

Le traitement de chaque mail est assez rapide, et quand le programme lance
la macro plusieurs fois de suite, un message "Cette tâche a été annulée
avant d'être achevée" apparaît. Je suppose que c'est dû au fait que les
instances d'Outlook se 'téléscopent'.
Il y a la solution d'une boucle d'attente, mais ce n'est pas très classe.
Il y a peut être deux autres solutions :
1 - une API ou WMI qui indique si Outlook est disponible à un nouvel envoi,
a vérifier avant de relancer la macro d'envoi de mail
2 - indiquer par programmation a Outlook de :
- ne pas envoyer automatiquement les mails
- stocker les mails dans la boite d'envoi
- une fois que tous les mails sont ds la boite d'envoi, donner l'ordre
d'envoi en une seule fois.

Des suggestions API ou VBA outlook pour l'une ou l'autre solution ?
Merci d'avance.

1 réponse

Avatar
Geo
Bonjour à Gadget qui nous a écrit :

Bonjour.
J'envoi à partir du VBA excel des mail grâce à une liaison précoce sur Outlook.

Voici le code (récupéré là :
http://officeassistant.ibelgique.com/excel_vba.html?3&weborama0#Send_mail_Outlook )

Sub SendMail_Outlook()
'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools /
Reference / Cocher "Microsoft 'Outlook Library"
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To =
.Subject = "Test"
.Body = "Contenu s " & vbLf & "deuxième linge"
.Attachments.Add "c:test1.TXT"
.Attachments.Add "c:test2.TXT"
.Send '.display
'On peut switcher entre .send et .display selon que l'on veut envoyer le
mail (send) ou seulement le préparer 'et le vérifier(display)
End With
End Sub

Le traitement de chaque mail est assez rapide, et quand le programme lance la macro
plusieurs fois de suite,



...

Plus simple ?
Solution 1
Faites une macro qui est lancée avant le premier envoi :

Public ol As New Outlook.Application
Sub InitOl
Set ol = Outlook.Application
end sub
et supprimer les même lignes de votre macro

Solution 2
Public NumEnvoi as integer
Public ol As New Outlook.Application
Sub SendMail_Outlook()
'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools /
Reference / Cocher "Microsoft 'Outlook Library"

Dim olmail As MailItem
Dim CurrFile As String
if NumEnvoi = 0 then
Set ol = Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
NumEnvoi = NumeEnvoi +1
end if

--
A+