Envoyer autant de mails qu'il y a d'adresse mails différentes dans une BDD

Bonjour à tous,

J'ai une base de données dans un onglet Excel et je souhaiterais envoyer en masse autant de mails qu'il y a d'adresse mails différentes dans la base de donnée. Mais il y a une petite difficulté : Si l'adresse mail se répète plusieurs fois dans la base données, je souhaiterais que cela génère un seule mai ( comme dans l'image ).

mail

Je vous ai mis en pièce jointe le fichier sur lequel je travaille. Dans le module, j'ai réussi à faire un programme qui me génère un mail par ligne ( 1 mail = 1 ligne ) mais je voudrais aujourd'hui faire 1 mail destiné à mail1@gmail.com, un deuxième mail destiné à mail2@gmail.com, un troisième mail @ mail3@gmail.com , etc.

Bien entendu, je souhaiterais que dans le contenu du mail, cela contient les lignes concernés.

Est-ce que vous pourriez-m'aider SVP ?

15mails.xlsm (20.54 Ko)

Hello,

Je te donne une piste, j'espère qu'elle va t'inspirer ...

Sub mailv2()

    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim message() As String
    Dim i As Byte

    ReDim message(1 To 3)
    message(1) = "msg1"
    message(2) = "msg2"
    message(3) = "msg3"

    Set OutlookApp = CreateObject("outlook.application")
    Set OutlookMail = OutlookApp.createitem(0)
        With OutlookMail
        .Subject = "toto" 'sujet du mail
        .To = "tata@gmail.com" 'adresse mail destinataire
        For i = 1 To 3
            .body = .body & message(i) & vbCr  'corps du message
        Next i
        .Display 'affiche le mail
        End With

End Sub

Salut Rag02700 !

Merci pour ta réponse mais ça ne répond pas vraiment à ma demande. La avec ton code, cela ne génère qu'un seul mail et je voudrais que ça génère autant de mails unique qu'il y a dans la colonne A avec en en destinataire l'adresse mail concerné

Est-ce que ça vous parle ?

C'est une piste pas qui peut t'aider à faire ce que tu cherches.
As tu testé pour voir ce que ça donne ?
As tu essayé de comprendre ce que je faisais ?

Hello,

Oui oui j'ai testé ton code et cela me génère un mail avec :

- comme destinataire : tata@gmail.com

- comme contenu de mail : Msg1 Msg2 et Msg3

Ce que tu as fais : Tu as bouclé le contenu du message de 1 à 3 pour afficher de manière dynamique le contenu des Tableaux.

Mais est-ce que tu peux m'en dire plus pour me mettre sur la piste STP ?

L'idée ici c'est de montrer comment stocker le body en mémoire et de restituer le contenu du tableau dans le body.

Tu peux utiliser la variable string comme tu as fait au lieu du tableau, mais tu es limité en nombre de caractères (à toi de voir si tu as beaucoup de donnée à stocker).

Donc, maintenant il ne reste plus qu'à récupérer le body du mail en fonction de l'adresse.

2 possibilités :

Soit tu fais un tri sur ton tableau par destinataire et tu alimentes ton tableau/string via une boucle while wend (tant que l'adresse est la même), une fois récupéré tout ton body tu envois.

Soit tu stockes une liste sans doublon de tes destinataires dans une autre feuille et tu viens filtrer ton tableau sur chaque adresse. Et tu alimentes ton string/tableau sur les lignes filtrées + envoi.

qqch comme ceci :

Sub mailv2()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim rngMailAddress As Range, rngTmpAddress As Range
    Dim i As Long
    Dim strAddressMail As String, strTmp As String

    Set OutlookApp = CreateObject("outlook.application")
    Set rngMailAddress = [A2:A30]
    Set rngTmpAddress = [G1:G29]
    rngTmpAddress.Value2 = rngMailAddress.Value2
    rngTmpAddress.RemoveDuplicates Columns:=1, Header:=xlNo
    Set rngMailAddress = rngTmpAddress.Resize(Cells(Rows.Count, "G").End(xlUp).Row)

    For Each rngTmpAddress In rngMailAddress
        strTmp = Empty
        strAddressMail = rngTmpAddress.Value2
        For i = 2 To 30
            If Cells("A" & i) = strAddressMail Then strTmp = strTmp & Cells("D" & i).Value & vbCr
        Next i
        Set OutlookMail = OutlookApp.createitem(0)
        With OutlookMail
            .Subject = "le sujet" 'sujet du mail
            .To = strAddressMail 'adresse mail destinataire
            .body = strTmp 'corps du message
            .Display 'affiche le mail
            '.send 'on envoie le mail créé
        End With
        Set OutlookMail = Nothing
    Next rngTmpAddress

    Set rngMailAddress = Nothing
    Set rngTmpAddress = Nothing
    Set OutlookApp = Nothing
End Sub

Merci beaucoup pour ton retour !

J’avais une dernière question : J’avais commencé à faire avec la boucle While ( car plus simple ).

Est-ce que tu pourrais me montrer avec le code STP car quand je fais de mon côté ma boucle tourne tout le temps ( elle ne s’arrête pas ) ?

Encore merci d’avoir pris le temps de me répondre

Avec la boucle while il faut que toutes tes adresses identiques se suivent. Donc il faut faire un tri avant la boucle while.

A partir de là, tu peux faire qqch comme ceci :

dim i as  long
dim adresse as string
dim corpsmail as string

i = 2
adresse = range("A" & i)
while range("A" & i) =  adresse 
corpsmail = corpsmail  + range("D" & i) & vbCr
i = i +1
wend
Rechercher des sujets similaires à "envoyer autant mails adresse differentes bdd"