Envoi mail automatique Excel/VBA
Bonjour à tous,
Je suis nouveau sur le forum et débutant en programmation VBA.
Apres recherche sur le forum j'ai trouvé plusieurs sujets sur mon problème qui est de pouvoir envoyer le contenu d'un range de cellule Excel via mail (dans le corp du message).
Voici ce que j'ai adapté d'après mes recherches:
Sub envoi_mail()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' On définit les variables
Dim OL As Object, myItem As Object, wDoc As Object
Set OL = CreateObject("Outlook.Application")
Set myItem = OL.CreateItem(olMailItem)
Set wDoc = myItem.GetInspector.WordEditor
' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
With myItem
.To = "xxx@ccc.com"
'.CC = "yyyyy@ccc.com"
.Subject = "test envoi mail"
.Display
Sheets("Synthèse").Activate
' Copie du tableau 1
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("Décapage").Activate
' Copie du tableau 2
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
End With
Set OL = Nothing
Set myItem = Nothing
Set wDoc = Nothing
End SubLe résultat m'ouvre un une fenêtre Outlook de visualisation du mail avec les tableaux qui vont bien à la suite les uns des autres.
Mon soucis vient de la commande .Display que je veux remplacer par .Send pour un envoi direct (maintenant que j'ai vu que le résultat me convient), si je remplace j'ai le message d'erreur suivant lors de l'exécution:
Erreur d'exécution '5', Argument ou procédure incorrect
Pourtant en regardant les docs Microsoft sur la fonction Outlook.Application la commande d'envoi est bien .Send, je ne comprend pas d'ou peut venir l'erreur.
est ce le positionnant de mon envoi qui n'est pas bon ?
Merci de votre aide.
Laurent
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Si l'on passe par l'éditeur Word (GetInspector.WordEditor), pour envoyer le mail via Outlook, Il faut utiliser la séquence ".Display" + ".Send"
La commande ".Display" est un passage obligé.
Merci de ton retour en effet je n'avais pas essayé avec les deux
Par contre une autre question avec mes deux tableaux le formatage du mail est bien
tableau1
tableau2
mais si j'ajoute d'autres insertions sur le même principe.
Sub envoi_mail()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' On définit les variables
Dim OL As Object, myItem As Object, wDoc As Object
Set OL = CreateObject("Outlook.Application")
Set myItem = OL.CreateItem(olMailItem)
Set wDoc = myItem.GetInspector.WordEditor
' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
With myItem
.To = "laurent.chantepie@revima.com"
'.CC = "yyyyy@gmail.com"
.Subject = "test envoi mail"
.Display
Sheets("tableau 1").Activate
' Copie du tableau 1
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("tableau 2").Activate
' Copie du tableau 2
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("tableau 3").Activate
' Copie du tableau 3
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("tableau 4").Activate
' Copie du tableau 4
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("tableau 5").Activate
' Copie du tableau 5
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
Sheets("tableau6").Activate
' Copie du tableau 6
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
.Send
End With
Set OL = Nothing
Set myItem = Nothing
Set wDoc = Nothing
End Suble formatage du mail devient
tableau1
tableau2tableau3tableau4...
une idée du soucis ? il me semble que je n'envoi pas de retour chariot mais cela fonctionne pour les 2 premiers ?
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Essayer ceci avec 2 lignes d'espacement
Sub envoi_mail()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' On définit les variables
Dim OL As Object, myItem As Object, wDoc As Object, rng As Object
Set OL = CreateObject("Outlook.Application")
Set myItem = OL.CreateItem(olMailItem)
Set wDoc = myItem.GetInspector.WordEditor
' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
With myItem
.To = "laurent.chantepie@revima.com"
'.CC = "yyyyy@gmail.com"
.Subject = "test envoi mail"
.Display
Set rng = wDoc.Content
Sheets("tableau 1").Activate
' Copie du tableau 1
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
rng.InsertAfter vbNewLine & vbNewLine
Sheets("tableau 2").Activate
' Copie du tableau 2
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
rng.InsertAfter vbNewLine & vbNewLineDans la visualisation du mail le positionnement semble bon mais lors de la reception j'ai le même formatage
tableau1
tableau2tableau3tableau4...
Je regarde une autre piste sur le même sujet, mais avec une autre fonction afin de ne pas dépendre de Outlook (en vue de lancer depuis un serveur)
Sub test()
'Definition des variables
Dim iMsg As Object, iConf As Object, Flds As Object, tab As Range
set tab = Sheets("tableau1").Range("A12:AG53").Select
'Desactivation des messages d'alerte
Application.DisplayAlerts = False
Set iMsg = CreateObject("cdo.message")
Set iConf = CreateObject("cdo.configuration")
Set Flds = iConf.Fields
With Flds
.Item("http:--schemas.microsoft.com-cdo-configuration-sendusing") = 2
'remplacez "smtp.nomserveur.fr" par le nom de serveur de votre FAI :
'htttps:--outlook.developpez.com-faq-index.php?page=Configuration#Paras_FAI
.Item("http:--schemas.microsoft.com-cdo-configuration-smtpserver") = "smtpsrv.fff.corp"
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "eee@fff.com"
'.cc = "ddd@fff.com"
.From = "ccc@fff.com"
.Subject = "test Mail"
.HTMLBody = "Bonjour,<br> Voici le fichier qui contient les données" & tab
'.AddAttachment
.Send
End With
End Submais je coince aussi sur l'intégration de la sélection dans le corps du mail
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Une modif à essayer pour la première solution
Sub envoi_mail()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' On définit les variables
Dim OL As Object, myItem As Object, wDoc As Object, rng As Object
Set OL = CreateObject("Outlook.Application")
Set myItem = OL.CreateItem(olMailItem)
Set wDoc = myItem.GetInspector.WordEditor
' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
With myItem
.To = "laurent.chantepie@revima.com"
'.CC = "yyyyy@gmail.com"
.Subject = "test envoi mail"
.Display
Set rng = wDoc.Content
Sheets("tableau 1").Activate
' Copie du tableau 1
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Paste
rng.InsertAfter vbNewLine & vbNewLine
Sheets("tableau 2").Activate
' Copie du tableau 2
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Start = Len(.Body)
wDoc.Application.Selection.End = wDoc.Application.Selection.Start
wDoc.Application.Selection.Paste
rng.InsertAfter vbNewLine & vbNewLine
Sheets("tableau 3").Activate
' Copie du tableau 3
Range("A12:AG53").CopyPicture
wDoc.Application.Selection.Start = Len(.Body)
wDoc.Application.Selection.End = wDoc.Application.Selection.Start
wDoc.Application.Selection.Paste
rng.InsertAfter vbNewLine & vbNewLinec'est presque bon, reste la signature qui est en auto qui s'intègre entre tableau1 et 2 ensuite tous les tableaux se suivent bien même après envoi du mail !
Merci
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Une solution simple est de supprimer la signature avec cette instruction
wDoc.Bookmarks("_MailAutoSig").Range.DeleteMerci de tes réponses rapides qui m'ont permis de résoudre mon pb.
J'ouvre un autre sujet pour l'autre idée.