Macro Envoi mail individuel à plusieurs destinataires
Bonjour à tous,
J'essaie de créer un petit fichier Excel qui me permettrait d'envoyer une partie d'une feuille appelée "newsletter" à une liste de destinataires qui seraient sur une feuille "BDD CLIENTS" (le tableau est nommé également "bdd_clients").
L'idée c'est de sélectionner les destinataires cibles dans ma BDD CLIENTS (sélectionner le département par exemple, code tarif, ect...) en puis cliquer sur "eMailing" et envoyer la newsletter au format HTML.
Ce que je ne parviens pas à faire c'est la boucle sur les adresses mails et gérer, éventuellement, les destinataires qui n'ont pas d'email (et qu'il faut zapper sans pour cela arrêter l'envoi des mails).
Je mets un fichier exemple pour mieux visualiser.
Bonne journée à tous et merci pour votre attention.
Restez au frais aujourd'hui ! :)
Joe
bonjour,
une proposition, pour la gestion des envois via mail. Par contre, il te reste à mettre au point la conversion de ta newsletter au format HTML
Sub EnvoiMail()
Dim d As Range
Dim LeMail As Variant
Dim olMailItem As Variant
olMailItem = 0
' Ne pas envoyer le mail si l'objet est vide
If Range("newsletter_objet").Value = "" Then
MsgBox ("La newsletter n'a pas d'objet!")
Exit Sub
End If
Set LeMail = CreateObject("Outlook.Application")
Set d = ThisWorkbook.Worksheets("BDD CLIENTS").Range("bdd_clients").SpecialCells(xlCellTypeVisible) 'les lignes filtrées
For Each client In d
' Envoi du mail aux destinataires
emailclient = client.Offset(, 12)
If emailclient <> "" Then
' si adresse mail
With LeMail.CreateItem(olMailItem)
.Subject = Range("newsletter_objet").Value
.to = emailclient
.HtmlBody = ThisWorkbook.Worksheets("NEWSLETTER").Range("newsletter").Value
.Display
End With
End If
Next
End Sub
Bonjour H2So4 et merci pour ton aide et ton attention.
J'ai un peu avancé, grâce essentiellement à ton aide et j'arrive à envoyer les mails aux différents destinataires.
Malheureusement, tous les mails ont un "body" vide... Je n'arrive pas à dire à ma macro de copier la "zone d'impression" dans le corps du mail... Je m'y prend comme une patate :P
Sub EnvoiMail()
' EnvoiMail permet d'envoyer des emails individuellement à des destinataires défini dans la liste bdd_clients
' La procédure d'envoi ne s'arrête pas même si l'email est absent de la ligne du client
Dim d As Range
Dim LeMail As Variant
Dim olMailItem As Variant
'Dim xHTMLBody As String
Dim zoneImp As String 'Défini la zone d'impression
olMailItem = 0
' Ne pas envoyer le mail si l'objet est vide
If Range("newsletter_objet").Value = "" Then
MsgBox ("La newsletter n'a pas d'objet!")
Exit Sub
End If
' Message d'avertissement avant de lancer l'emailing
Rep = MsgBox("Vous allez lancer l'eMailing !" & Chr(13) & Chr(10) & "Le Public Cible a été sélectionné ?", vbYesNo)
If Rep = vbNo Then
Exit Sub
End If
' Définir la zone d'impression "zoneImp"
Worksheets("NEWSLETTER").PageSetup.PrintArea = "newsletter"
zoneImp = Worksheets("NEWSLETTER").PageSetup.PrintArea
Set LeMail = CreateObject("Outlook.Application")
Set d = ThisWorkbook.Worksheets("BDD CLIENTS").Range("bdd_clients").SpecialCells(xlCellTypeVisible) 'les lignes filtrées
For Each client In d
' Envoi du mail aux destinataires
emailclient = client.Offset(, 12)
If emailclient <> "" Then
' si adresse mail
With LeMail.CreateItem(olMailItem)
.Subject = Range("newsletter_objet").Value
.To = emailclient
.Body = zoneImp
'.Display
.Send
End With
End If
Next
End Sub
Je continue à chercher comment manipuler cette "zone d'impression" pour l'afficher dans le corps du mail... et après on verra pour la conversion du mail en html.
Bonne journée à tous.
Joe
Bonjour,
Pour mettre une page HTML dans un mail, 3 possibilités :
1) mettre un lien vers une page WEB qui contient le document HTML (il te faut un hébergeur) (un document word sauvé au format HTML, par exemple)
2) mettre le document HTML en pièce jointe au mail (un document word sauvé au format HTML, par exemple)
3) coder le document HTML dans le corps du mail (corps au format HTML) propriété bodyHTML
j'ai adapté ton code pour "la zone d'impression", mais c'est difficilement utilisable pour en faire du HTML en reprenant toutes tes mises en forme.
Sub EnvoiMail()
' EnvoiMail permet d'envoyer des emails individuellement à des destinataires défini dans la liste bdd_clients
' La procédure d'envoi ne s'arrête pas même si l'email est absent de la ligne du client
Dim d As Range
Dim LeMail As Variant
Dim olMailItem As Variant
'Dim xHTMLBody As String
Dim zoneImp As String 'Défini la zone d'impression
olMailItem = 0
' Ne pas envoyer le mail si l'objet est vide
If Range("newsletter_objet").Value = "" Then
MsgBox ("La newsletter n'a pas d'objet!")
Exit Sub
End If
' Message d'avertissement avant de lancer l'emailing
Rep = MsgBox("Vous allez lancer l'eMailing !" & Chr(13) & Chr(10) & "Le Public Cible a été sélectionné ?", vbYesNo)
If Rep = vbNo Then
Exit Sub
End If
'la newsletter
With Sheets("newsletter").UsedRange
For i = 1 To .Rows.Count
zoneImp = zoneImp & vbNewLine
texte = ""
For j = 1 To .Columns.Count
cel = .Cells(i, j)
If cel <> "" Then texte = texte & " " & cel
Next j
zoneImp = zoneImp & texte
Next i
End With
Set LeMail = CreateObject("Outlook.Application")
Set d = ThisWorkbook.Worksheets("BDD CLIENTS").Range("bdd_clients").SpecialCells(xlCellTypeVisible) 'les lignes filtrées
For Each client In d
' Envoi du mail aux destinataires
emailclient = client.Offset(, 12)
If emailclient <> "" Then
' si adresse mail
With LeMail.CreateItem(olMailItem)
.Subject = Range("newsletter_objet").Value
.To = emailclient
.Body = zoneImp
.Display
'.Send
End With
End If
Next
End Sub