Envoi de mails par CDO : syntaxe pour plusieurs CC

10 réponses
Avatar
ThierryP
Bonjour le forum,

Je souhaite envoyer un Email =E0 plusieurs personnes en CC : une adresse es=
t r=E9cup=E9r=E9e dans une cellule, mais je voudrais ajouter deux adresses =
"en dur" dans le code.... et je n'arrive pas =E0 trouver la syntaxe. Dois-j=
e boucler sur une plage pour envoyer en plusieurs fois, ou y a-t-il plus ef=
ficace ?

Merci d'avance pour vos lumi=E8res !

ThierryP

10 réponses

Avatar
MichD
Bonjour,

Habituellement, un point virgule entre les destinataires sont suffisants

Tout ce que tu veux savoir sur ce site :
http://www.rondebruin.nl/cdo.htm#Tips

L'exemple comporte 2 adresses fixes + le contenu de la cellule A1 de la
feuille Feuil1
Feuil1 représente la propriété Name de l'objet Feuille et non le nom de
l'onglet.

'-------------------------------------
Sub EnvoiMail_Par_CDO()
Dim Destinataire As String, Expéditeur As String, Sujet As String
Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As String
Expéditeur = "Expé"
Destinataire = Feuil1.Range("A1")
Sujet = "Test envoi"
TexteMessage = "Le texte du message"
'FichierAttaché = "Adresse et nom du fichier à joindre"
ServeurSMTP = "smtp.Serveur"

'Construction et envoi
With CreateObject("CDO.Message")
.From = Expéditeur
.To = Destinataire
.CC = """"";"""";"" &
Feuil1.Range(""A1"") & """
.Subject = Sujet
.TextBody = TexteMessage
If FichierAttaché <> "" Then
.AddAttachment FichierAttaché
End If
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
ServeurSMTP
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")
= 25
.Update
End With
.Send
End With
End Sub

'-------------------------------------

MichD
---------------------------------------------------------------
Avatar
ThierryP
Bonjour Denis,

Toujours infatigable :-)))

Merci pour l'exemple.... qui m'a permis de me rendre compte que j'ai toujou rs du mal à empiler les guillemets !!

Mais il doit subsister un petit souci... Même en recopiant exactement ton exemple, avec des adresses valides bien sûr, j'ai une erreur. Voici ce q ue me renvoie un debug.print :
"La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & > i nvalid address"

Il semble que VBA lit littéralement le texte au lieu de récupérer la valeur de A1.... et je ne sais plus où essayer de rajouter ou d'enlever c es @%$*ù£? de guillemets !!

Merci pour le site de Ron de Bruin, mais déjà précieusement dans mes favoris depuis longtemps :-))

ThierryP



Le vendredi 15 février 2013 13:19:27 UTC+1, MichD a écrit :
Bonjour,



Habituellement, un point virgule entre les destinataires sont suffisants



Tout ce que tu veux savoir sur ce site :

http://www.rondebruin.nl/cdo.htm#Tips



L'exemple comporte 2 adresses fixes + le contenu de la cellule A1 de la

feuille Feuil1

Feuil1 représente la propriété Name de l'objet Feuille et non le no m de

l'onglet.



'-------------------------------------

Sub EnvoiMail_Par_CDO()

Dim Destinataire As String, Expéditeur As String, Sujet As String

Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As St ring

Expéditeur = "Expé"

Destinataire = Feuil1.Range("A1")

Sujet = "Test envoi"

TexteMessage = "Le texte du message"

'FichierAttaché = "Adresse et nom du fichier à joindre"

ServeurSMTP = "smtp.Serveur"



'Construction et envoi

With CreateObject("CDO.Message")

.From = Expéditeur

.To = Destinataire

.CC = """"";"""";"" &

Feuil1.Range(""A1"") & """

.Subject = Sujet

.TextBody = TexteMessage

If FichierAttaché <> "" Then

.AddAttachment FichierAttaché

End If

With .Configuration.Fields

.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =

ServeurSMTP

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpo rt")

= 25

.Update

End With

.Send

End With

End Sub



'-------------------------------------



MichD

---------------------------------------------------------------
Avatar
MichD
| "La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & >
invalid address"

Si tu n'es pas familier avec ce type d'adresse : Feuil1.Range( A1 )
utilise plutôt ceci :
Worksheets("NomDelaDiteFeuille").Range("A1")

NomDelaDiteFeuille : C'est le nom de l'onglet où
est l'adresse de courriel à récupérer

A1 : La cellule où est inscrite l'adresse.

La procédure que je t'ai envoyée a été testée ce matin même
et elle fonctionne correctement



MichD
---------------------------------------------------------------
"ThierryP" a écrit dans le message de groupe de discussion :


Bonjour Denis,

Toujours infatigable :-)))

Merci pour l'exemple.... qui m'a permis de me rendre compte que j'ai
toujours du mal à empiler les guillemets !!

Mais il doit subsister un petit souci... Même en recopiant exactement ton
exemple, avec des adresses valides bien sûr, j'ai une erreur. Voici ce que
me renvoie un debug.print :
"La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & > invalid
address"

Il semble que VBA lit littéralement le texte au lieu de récupérer la valeur
de A1.... et je ne sais plus où essayer de rajouter ou d'enlever ces @%$*ù£?
de guillemets !!

Merci pour le site de Ron de Bruin, mais déjà précieusement dans mes favoris
depuis longtemps :-))

ThierryP



Le vendredi 15 février 2013 13:19:27 UTC+1, MichD a écrit :
Bonjour,



Habituellement, un point virgule entre les destinataires sont suffisants



Tout ce que tu veux savoir sur ce site :

http://www.rondebruin.nl/cdo.htm#Tips



L'exemple comporte 2 adresses fixes + le contenu de la cellule A1 de la

feuille Feuil1

Feuil1 représente la propriété Name de l'objet Feuille et non le nom de

l'onglet.



'-------------------------------------

Sub EnvoiMail_Par_CDO()

Dim Destinataire As String, Expéditeur As String, Sujet As String

Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As
String

Expéditeur = "Expé"

Destinataire = Feuil1.Range("A1")

Sujet = "Test envoi"

TexteMessage = "Le texte du message"

'FichierAttaché = "Adresse et nom du fichier à joindre"

ServeurSMTP = "smtp.Serveur"



'Construction et envoi

With CreateObject("CDO.Message")

.From = Expéditeur

.To = Destinataire

.CC = """"";"""";"" &

Feuil1.Range(""A1"") & """

.Subject = Sujet

.TextBody = TexteMessage

If FichierAttaché <> "" Then

.AddAttachment FichierAttaché

End If

With .Configuration.Fields

.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") =
2

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")
>
ServeurSMTP


.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")

= 25

.Update

End With

.Send

End With

End Sub



'-------------------------------------



MichD

---------------------------------------------------------------
Avatar
ThierryP
Merci pour le retour, mais oui je suis familier avec ce type de notation, m ême si je n'ai pas tes connaissances !

J'ai fait un strict copier/coller de ta procédure dans un classeur vierge en adaptant à ma configuration, voilà ce que ça donne (avec toujours la même erreur) :

'-------------------------------------
ub EnvoiMail_Par_CDO()
Dim Destinataire As String, Expéditeur As String, Sujet As String
Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As Stri ng
Expéditeur = ""
Destinataire = Feuil1.Range("A1")
Sujet = "Test envoi"
TexteMessage = "Le texte du message"
On Error GoTo Erreur
'Construction et envoi
With CreateObject("CDO.Message")
.From = Expéditeur
.To = Destinataire
.CC = """"";"""";"" & Feui l1.Range(""A1"") & """ 'Avec mon adresse en A1
.Subject = Sujet
.TextBody = TexteMessage
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mails.9services.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername" ) = ""
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword" ) = "mon_mot_de_passe"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpor t") = 25
.Update
End With
.Send
End With
Exit Sub
Erreur:
Debug.Print Err.Source & Err.Description
End Sub
'------------------------------------------------------

Et le debug me renvoie toujours cette erreur :
"VBAProject Le serveur a rejeté une ou plusieurs adresses de destinataire s. La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & > invalid address"

Comme je ne vois pas les guillemets autour de A1, on dirait que VBA ne va p as chercher l'adresse en A1, mais interprète littéralement Feuil1. etc. .

Je suis sous Excel 2002, y aurait-il une différence avec 2010 ou 2013 ??? ??

Merci de ta patience.....

ThierryP

Le vendredi 15 février 2013 15:03:33 UTC+1, MichD a écrit :
| "La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & >

invalid address"



Si tu n'es pas familier avec ce type d'adresse : Feuil1.Range( A1 )

utilise plutôt ceci :

Worksheets("NomDelaDiteFeuille").Range("A1")



NomDelaDiteFeuille : C'est le nom de l'onglet où

est l'adresse de courriel à récupérer



A1 : La cellule où est inscrite l'adresse.



La procédure que je t'ai envoyée a été testée ce matin même

et elle fonctionne correctement







MichD

Avatar
MichD
A ) Pourquoi veux-tu envoyer ton message 2 fois au même destinataire?
Destinataire = Feuil1.Range("A1")
Et tu utilises la même adresse dans CC

B ) L'envoi du courriel à l'adresse qu'utilise l'expéditeur ne fonctionne
pas
cela ne provoque pas d'erreur, mais l'expéditeur ne reçoit pas le
message.

C ) Tu as effectivement le SMTP de ton programme de courriel

Je ne peux pas corriger l'erreur, je n'ai aucun problème à exécuter cette
procédure sans erreur.


MichD
---------------------------------------------------------------
"ThierryP" a écrit dans le message de groupe de discussion :


Merci pour le retour, mais oui je suis familier avec ce type de notation,
même si je n'ai pas tes connaissances !

J'ai fait un strict copier/coller de ta procédure dans un classeur vierge en
adaptant à ma configuration, voilà ce que ça donne (avec toujours la même
erreur) :

'-------------------------------------
ub EnvoiMail_Par_CDO()
Dim Destinataire As String, Expéditeur As String, Sujet As String
Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As String
Expéditeur = ""
Destinataire = Feuil1.Range("A1")
Sujet = "Test envoi"
TexteMessage = "Le texte du message"
On Error GoTo Erreur
'Construction et envoi
With CreateObject("CDO.Message")
.From = Expéditeur
.To = Destinataire
.CC = """"";"""";"" &
Feuil1.Range(""A1"") & """ 'Avec mon adresse en A1
.Subject = Sujet
.TextBody = TexteMessage
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
"mails.9services.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")
= ""
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")
= "mon_mot_de_passe"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")
= 25
.Update
End With
.Send
End With
Exit Sub
Erreur:
Debug.Print Err.Source & Err.Description
End Sub
'------------------------------------------------------

Et le debug me renvoie toujours cette erreur :
"VBAProject Le serveur a rejeté une ou plusieurs adresses de destinataires.
La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & > invalid
address"

Comme je ne vois pas les guillemets autour de A1, on dirait que VBA ne va
pas chercher l'adresse en A1, mais interprète littéralement Feuil1. etc..

Je suis sous Excel 2002, y aurait-il une différence avec 2010 ou 2013 ?????

Merci de ta patience.....

ThierryP

Le vendredi 15 février 2013 15:03:33 UTC+1, MichD a écrit :
| "La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & >

invalid address"



Si tu n'es pas familier avec ce type d'adresse : Feuil1.Range( A1 )

utilise plutôt ceci :

Worksheets("NomDelaDiteFeuille").Range("A1")



NomDelaDiteFeuille : C'est le nom de l'onglet où

est l'adresse de courriel à récupérer



A1 : La cellule où est inscrite l'adresse.



La procédure que je t'ai envoyée a été testée ce matin même

et elle fonctionne correctement







MichD

Avatar
ThierryP
A) Fichier en test, donc je ne veux pas polluer le monde entier avec mes es sais!!
B) euh... J'ai quand même vérifié !! Ce sont des adresse de collègu es dans le bureau voisin.... pratique pour vérifier que ça arrive !!
C) Si j'utilise ta syntaxe sans la partie "Feuil1.range" etc..., les Email s partent sans problème.

Merci malgré tout de ton aide.

ThierryP

Le vendredi 15 février 2013 16:26:59 UTC+1, MichD a écrit :
A ) Pourquoi veux-tu envoyer ton message 2 fois au même destinataire?

Destinataire = Feuil1.Range("A1")

Et tu utilises la même adresse dans CC



B ) L'envoi du courriel à l'adresse qu'utilise l'expéditeur ne foncti onne

pas

cela ne provoque pas d'erreur, mais l'expéditeur ne reçoit pas l e

message.



C ) Tu as effectivement le SMTP de ton programme de courriel



Je ne peux pas corriger l'erreur, je n'ai aucun problème à exécuter cette

procédure sans erreur.





MichD

---------------------------------------------------------------

"ThierryP" a écrit dans le message de groupe de discussion :





Merci pour le retour, mais oui je suis familier avec ce type de notation,

même si je n'ai pas tes connaissances !



J'ai fait un strict copier/coller de ta procédure dans un classeur vier ge en

adaptant à ma configuration, voilà ce que ça donne (avec toujours l a même

erreur) :



'-------------------------------------

ub EnvoiMail_Par_CDO()

Dim Destinataire As String, Expéditeur As String, Sujet As String

Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As St ring

Expéditeur = ""

Destinataire = Feuil1.Range("A1")

Sujet = "Test envoi"

TexteMessage = "Le texte du message"

On Error GoTo Erreur

'Construction et envoi

With CreateObject("CDO.Message")

.From = Expéditeur

.To = Destinataire

.CC = """"";"""";"" &

Feuil1.Range(""A1"") & """ 'Avec mon adresse en A1

.Subject = Sujet

.TextBody = TexteMessage

With .Configuration.Fields

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver" ) =

"mails.9services.com"

.Item("http://schemas.microsoft.com/cdo/configuration/sendusernam e")

= ""

.Item("http://schemas.microsoft.com/cdo/configuration/sendpasswor d")

= "mon_mot_de_passe"

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverp ort")

= 25

.Update

End With

.Send

End With

Exit Sub

Erreur:

Debug.Print Err.Source & Err.Description

End Sub

'------------------------------------------------------



Et le debug me renvoie toujours cette erreur :

"VBAProject Le serveur a rejeté une ou plusieurs adresses de destinatai res.

La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & > in valid

address"



Comme je ne vois pas les guillemets autour de A1, on dirait que VBA ne va

pas chercher l'adresse en A1, mais interprète littéralement Feuil1. e tc..



Je suis sous Excel 2002, y aurait-il une différence avec 2010 ou 2013 ? ????



Merci de ta patience.....



ThierryP



Le vendredi 15 février 2013 15:03:33 UTC+1, MichD a écrit :

> | "La réponse du serveur était : 550 5.5.0 < & Feuil1.Range( A1 ) & >

>

> invalid address"

>

>

>

> Si tu n'es pas familier avec ce type d'adresse : Feuil1.Range( A1 )

>

> utilise plutôt ceci :

>

> Worksheets("NomDelaDiteFeuille").Range("A1")

>

>

>

> NomDelaDiteFeuille : C'est le nom de l'onglet où

>

> est l'adresse de courriel à récupérer

>

>

>

> A1 : La cellule où est inscrite l'adresse.

>

>

>

> La procédure que je t'ai envoyée a été testée ce matin même

>

> et elle fonctionne correctement

>

>

>

>

>

>

>

> MichD

>
Avatar
Yopop
Bonjour,

Ca semble être la partie .CC qui pose problème.
essaye comme ça :

.CC = """"";"""";""" &
Feuil1.Range("A1") & """"

en recollant tout sur une ligne.

j-p
Avatar
MichD
Un dernier test :

'-------------------------------------------
Sub EnvoiMail()
Dim Destinataire As String, Expéditeur As String, Sujet As String
Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As String
Expéditeur = ""
Destinataire = Feuil1.Range("A1")
Sujet = "Test envoi"
TexteMessage = "Le texte du message"
'FichierAttaché = "Adresse et nom du fichier à joindre"
ServeurSMTP = "smtp.serveur"

'Construction et envoi
With CreateObject("CDO.Message")
.From = Expéditeur
.To = Destinataire
.CC = """"";"""";"""
& Feuil1.Range("A1") & """"

.Subject = Sujet
.TextBody = TexteMessage
If FichierAttaché <> "" Then
.AddAttachment FichierAttaché
End If
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
ServeurSMTP
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")
= 25
.Update
End With
.Send
End With

End Sub
'-------------------------------------------

MichD
---------------------------------------------------------------
Avatar
ThierryP
Bonjour Denis,

Ce qui est bien, c'est que tu n'abandonnes jamais :-)))))))
Cette fois, tout est OK, les tests depuis chez moi fonctionnent !!

Encore merci pour tout !!

ThierryP


Le vendredi 15 février 2013 19:34:44 UTC+1, MichD a écrit :
Un dernier test :



'-------------------------------------------

Sub EnvoiMail()

Dim Destinataire As String, Expéditeur As String, Sujet As String

Dim TexteMessage As String, FichierAttaché As String, ServeurSMTP As St ring

Expéditeur = ""

Destinataire = Feuil1.Range("A1")

Sujet = "Test envoi"

TexteMessage = "Le texte du message"

'FichierAttaché = "Adresse et nom du fichier à joindre"

ServeurSMTP = "smtp.serveur"



'Construction et envoi

With CreateObject("CDO.Message")

.From = Expéditeur

.To = Destinataire

.CC = """"";"""" ;"""

& Feuil1.Range("A1") & """"



.Subject = Sujet

.TextBody = TexteMessage

If FichierAttaché <> "" Then

.AddAttachment FichierAttaché

End If

With .Configuration.Fields

.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") =

ServeurSMTP

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpo rt")

= 25

.Update

End With

.Send

End With



End Sub

'-------------------------------------------



MichD

---------------------------------------------------------------
Avatar
ThierryP
Bonjour Yopop,

Bien vu !! Toujours du mal avec les "" :-))
Michdenis et toi avez su compter correctement et tout marche nickel

Merci

ThierryP

Le vendredi 15 février 2013 17:45:18 UTC+1, Yopop a écrit :
Bonjour,



Ca semble être la partie .CC qui pose problème.

essaye comme ça :



.CC = """"";"""";""" &

Feuil1.Range("A1") & """"



en recollant tout sur une ligne.



j-p