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 ).
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 ?
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 SubSalut 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 ?
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 SubMerci 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