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

Le
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&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 = 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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #16511911
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+
Publicité
Poster une réponse
Anonyme