Envoi mail à partir de vba excel : "Cette tâche a été annulée avant d'être
1 réponse
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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+
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 = 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,
...
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
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