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
Rechercher des sujets similaires à "macro envoi mail individuel destinataires"