Microsoft 365 Envoi de mail personalisé via Outlook problème de boucle

Ben78

XLDnaute Nouveau
Bonjour,

je suis en train de travailler sur une macro permettant l'envoi d'email personnalisé à une liste de destinataires (en cellule A2 à A143), le texte de chaque mail étant en colonne B; la macro tourne bien mais je bloque sur la création de la boucle du texte "personnalisé" .body qui prend toujours le contenu de la cellule B2 au lieu de passer de ligne en ligne.

Pourriez vous me donner un avis?

Cordialement
Benoit

Sub SendEmail()

Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
For Each Cel In Range("A2:A143")
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = Cel.Value
.Subject = Range("C2")
.Body = Range("B2").Value & vbCrLf_
.Send
End With
Next Cel
End Sub
 

Ben78

XLDnaute Nouveau
Bonjour [U]xUpsilon[/U]

je vous remercie de votre aide, qui me permet d'avancer sur la boucle malheureusement elle semble descendre tout en bas et ne prendre que le dernier texte, ne faudrait t'il pas juste descendre d'une ligne ? et surtout comment?

Cordialement
Benoit

Sub SendEmail()

Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
For Each Cel In Range("A2:A143")
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = Cel.Value
.Subject = Range("C2")

For i = 2 To Range("B2").End(xlDown).Row
.Body = Range("B" & i) & vbCrLf_
Next i

.Send
End With
Next Cel
End Sub
 

Ben78

XLDnaute Nouveau
Merci pour la variable, mais cela induit un résultat étrange au lieu de renvoyer le contenu d'une seule cellule la macro renvoie toutes les lignes dans le corps du mail, cela ne proviendrait pas du "End(xlDown).Row"?

Cordialement
Benoit

VB:
Sub SendEmail()
 
Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
Dim Corps As String


For Each Cel In Range("A2:A143")

Set olMail = olApp.CreateItem(olMailItem)
 With olMail
.To = Cel.Value
.Subject = Range("C2")

For i = 2 To Range("B2").End(xlDown).Row
    Corps = Corps & Range("B" & i) & vbCrLf_
Next i

.Body = Corps

.Send

End With

Next Cel

End Sub
 

Ben78

XLDnaute Nouveau
Oups... j'aurai du commencer par cela... désolé.

Mon souhait est d'envoyer des emails individualisés à une liste de destinataires.
Le destinataire se trouvent en colonne A, le corps du mail correspondant est en colonne B et l'objet est fixe en cellule C2.

La première adresse mail est en A2, le corps correspondant en B2,
puis la seconde en A3, avec le corps en B3 etc etc...

en l'état la macro créé bien un mail pour chaque destinataire mais regroupe tous les corps et donc le destinataire A2 reçoit un corps composé de B2+B3+etc...

Cordialement
Benoit
 

Ben78

XLDnaute Nouveau
Je pense que le problème provient de l'emplacement du "Next i" en effet en le positionnant après le send ça me fait le premier mail ok par contre la macro plante au deuxieme destinataire en indiquant sur ".Body = Corps" l'élément a été déplacé ou supprimé... La solution ne semble pas loin ... mais cela reste rageant.

Cordialement
Benoit


VB:
Sub SendEmail()
 
Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
Dim Corps As String


For Each Cel In Range("A2:A143")

Set olMail = olApp.CreateItem(olMailItem)
 With olMail
.To = Cel.Value
.Subject = Range("C2")

For i = 2 To Range("B2").End(xlDown).Row
    Corps = Corps & Range("B" & i) & vbCrLf_

.Body = Corps

.Send

Next i

End With

Next Cel

End Sub
 

Ben78

XLDnaute Nouveau
Bonsoir,
Pour résumer : j'ai les destinataires en colonne A, les mails en colonne B, et l'objet du mail en C2, mais si cela est plus simple je peux avoir le mail en colonne C et faire un titre de mail individualisé... mais là ça devient un peu luxe :)
 

Santulud

XLDnaute Occasionnel
Bonsoir,

a tester
VB:
ub SendEmail()

Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
dim i as string

for i = 2 to 143
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = range("a" & i).value
.Subject = Range("C2")

.Body = Range("B" & i) & vbCrLf_

.Send
next i
End With

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Ce petit test devrait éclairer ta lanterne
VB:
Sub test()
'Dim olMail As Outlook.MailItem
Dim Corps As String
Dim Cel As Range
For Each Cel In Range("A2:A143")
'Set olMail = olApp.CreateItem(olMailItem)
' With olMail
'.To = Cel.Value
'.Subject = Range("C2")
'For i = 2 To Range("B2").End(xlDown).Row
'    Corps = Corps & Range("B" & i) & vbCrLf_
'Next i
'.Body = Corps
'.Send
'End With
MsgBox Cel.Address 'Email
MsgBox Cel.Offset(0, 1).Address 'B 'Corps mail
MsgBox Range("C2").Address ' C: Objet
Next Cel
End Sub
Tu vois comment réadapter ensuite ta macro en conséquence?
 

Discussions similaires

Réponses
2
Affichages
233

Statistiques des forums

Discussions
312 196
Messages
2 086 094
Membres
103 116
dernier inscrit
kutobi87