VB Excel OUTLOOK liste adresses mails [Résolu/Fermé]

Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 13 mai 2009 à 18:05 - Dernière réponse : Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention
- 6 juil. 2009 à 18:56
Bonjour à tous,

Envoyer par VB Excel, un mail avec une liste d'adresses pré-complétée... Problème assez récurrent. J'ai beaucoup fouillé sur le web à ce sujet, et j'ai trouvé des réponses. mais faut voir les réponses... A croire que certaines personnes s'amusent à faire le plus compliqué possible. Vous allez me dire qu'ils n'ont peut-être pas le choix!
J'ai donc décidé de passer outre les propositions hasardeuses et incompréhensibles proposées à droite et gauche, et de faire mon petit code à moi, simplissime comme tout... Mais voilà, le résultat n'est pas parfait puisqu'il faut que je clique dans l'espace "A:" de Outlook et que je fasse "Entrée" pour pouvoir envoyer le mail!
Alors j'espère que quelqu'un pourra m'aider, parce que je suis incapable de reprendre les codes proposés sur d'autres post. Je n'y comprends pas grand chose.

Voili voilou comment je me suis débrouillée:
dans Excel, j'ai une cellule avec la liste des adresses mails séparées par des point-virgules.
Exemple: cellule J11 du feuillet admin: monsieur.dupont@imaginez.com ; monsieur.dupuis@imaginez.com

Dans VB: voici mon code:

                
                ' Récupérer les mails des destinataires
                Workbooks("test.xls").Activate
                Sheets("admin").Activate
                MailAd = Range("J11").Value
                
                ' Ouvrir une page Outlook pour envoyer le fichier
                Application.Dialogs(xlDialogSendMail).Show MailAd


Qu'en pensez-vous docteurs?
Afficher la suite 
114Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention

31 réponses

Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 18 mai 2009 à 18:38
0
Utile
Personne n'a une idée pour me sortir de mon problème?
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 19 mai 2009 à 01:23
0
Utile
1
la solution ne ne parait pas compliquée. Voici un exemple de code :

1- procédure Excel VBA

Sub test1

' Récupérer les mails des destinataires
Workbooks("test.xls").Activate
Sheets("admin").Activate
MailAd = Range("J11").Value

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = New Outlook.Application
call appli_Outlook .test2(MailAd)

end Sub


2- sous-procédure à mettre sous Thisoutlooksession dans le projet Outlook VBA pour éviter les avertissements de sécurité :

Sub test2(mail_liste)

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires)
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = sujet
e_mail.Body = Message

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
Exit Sub

' routine erreur
erreur_création_e_mail:
MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
Resume création_mail_exit

End Sub
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 19 mai 2009 à 14:45
Bonjour thev et merci pour ta réponse.

La macro test1 ne s'exécute pas. J'ai le message d'erreur suivant: "erreur envoi e-mail -2147467259 Impossible de reconnaître un ou plusieurs noms".
J'ai ajouté la référence: "Microsoft outlook Object Library". Faut-il que j'en ajoute une autre?

J'ai aussi tenté de modifier le code car dans test1, on utilise MailAd et dans test2, on utilise mail_liste. Donc j'ai changé test1 en
Sub test1()
    Sheets("admin").Activate
    mail_liste = Range("H11").Value
    'MsgBox (mail_liste)
    
    ' appelle une sous-procédure Outlook VBA
    Set appli_Outlook = New Outlook.Application
    Call appli_Outlook.test2(mail_liste)

End Sub

Mais toujours bloqué. :-(
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 19 mai 2009 à 16:33
0
Utile
1
Le message d'erreur indique qu'il ne trouve pas un ou plusieurs noms dans le carnet d'adresse Outlook.

1) Pour visualiser un à un les destinataires placés dans le message envoyé, ajouter l'instruction suivante :
'ajoute les destinataires
destinataires = Split(mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires)
MsgBox "destinataire = " & destinataires(i_destinataire)
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

2) Pour voir le ou les destinataires qui posent problème, en essayer un seul, puis deux, ....
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 19 mai 2009 à 19:59
RE-bonjour thev, et merci de m'aider

Suis-je obligée d'utiliser des adresses mails déjà enregistrées dans Outlook? Y-a-t-il une méthode pour pallier cela?

Biz
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 19 mai 2009 à 23:44
0
Utile
1
réponse : oui et non

1) oui si le destinataire fourni est fourni sous la forme d'un nom (par ex robert martin) auquel cas la macro fait appel au carnet d'adresses Outlook pour le traduire sous la forme d'une adresse e-mail

2) non si le destinataire fourni est sous la forme d'une adresse e-mail (nnnnnn@ddddddd.ccc ) auquel cas l'accès au carnet d'adresse n'est pas nécessaire.
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 20 mai 2009 à 10:33
Bonjour thev,

j'ai un nouveau problème que je n'avais pas hier (sur le même code...j'ai du mal à comprendre!).
Sur la ligne
Call appli_Outlook.test2(MailAd)


J'ai le message "propriété ou méthode non gérée par cet objet". Pourtant les références:
Microsoft outlook 11.0 Object LIbrary et
OutlookAddin 1.0 TypeLibrary. QUelle référence peut-il bien me manquer? Surtout qu'entre hier et aujourd'hui je n'en ai pas enlevé!

Par rapport à ma liste de destinataires, elle est déjà au format nnnnnn@ddddddd.ccc , et nom une liste de noms.
Les 2 problèmes sont peut-être liés?
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 mai 2009 à 10:56
0
Utile
1
il ne trouve pas la procédure test2 dans outlook VBA
2 raisons :
1- l'application Outlook n'est pas démarrée,
2- la procédure test2 ne setrouve pas sous ThisOutlookSession
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 20 mai 2009 à 11:49
Merci pour ta réponse thev.

Outlook est bien démarré, et la procédure test2 est bien sous ThisOutlookSession. Et j'ai repris exactement ton code pour test1 (j'avais modifié MailAd contre Mail_liste).

Sub test1()

' Récupérer les mails des destinataires
Sheets("admin").Activate
MailAd = Range("H11").Value
MsgBox (MailAd)

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = New Outlook.Application
Call appli_Outlook.test2(MailAd)

End Sub

Mais il plante toujours. Pourtant hier il fonctionnait. Il plantait juste par rapport au fait qu'il ne reconnaissait pas les adresses.
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 mai 2009 à 12:03
0
Utile
Pour le problème de reconnaissance des adresses, après test des 2 procédures, il faut en fait apporter la modification suivante :

' ajoute les destinataires
destinataires = Split(mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires) - 1
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

Il ajoutait en fait un destinataire vide de trop, ce qui provoquait l'erreur.


Pour la nouvelle erreur, pour le moment je ne vois pas.
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 mai 2009 à 13:21
0
Utile
1
Pour la nouvelle erreur, essayer la modification suivante (suppression paramètre New):

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
Call appli_Outlook.test2(MailAd)


Par ailleurs, pour remplir objet et sujet du message apporter les modifications suivantes :


---- procédure Excel VBA -----------------
Sub test1

' Récupérer les mails des destinataires
Workbooks("test.xls").Activate
Sheets("admin").Activate
MailAd = Range("J11").Value
sujet = "test01-sujet"
message = "test01-message"


' appelle une sous-procédure Outlook VBA
Set appli_Outlook = New Outlook.Application
call appli_Outlook .test2(MailAd,sujet,message)

end Sub

-- procédure Outlook VBA ------
Sub test2(mail_liste,sujet,Message)
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 20 mai 2009 à 14:12
J'ai testé en enlevant le "new", pas de changement.
J'ai testé les autres modifications mais je suis bloquée par le bogue.
Ce qui est dingue, c'est qu'hier il ne me faisait pas cela. J'ai travaillé sur du code VB, penses-tu que j'ai utilisé une instruction qui pourrait être source de ce problème? (genre Application.ScreenUpdating = false
Application.DisplayAlerts = false...)
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 mai 2009 à 16:43
0
Utile
1
Je crois que le mieux est de reposter le code exact que tu utlises .
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 20 mai 2009 à 18:41
Dans un module de mon fichier .xls
Sub test1()

' Récupérer les mails des destinataires
Sheets("admin").Activate
MailAd = Range("H11").Value
  
' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
Call appli_Outlook.test2(MailAd)

End Sub


Dans VB Outlook / ThisOutlookSession
Sub test2(mail_liste)

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = Application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires)
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = sujet
e_mail.Body = Message

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
Exit Sub

' routine erreur
erreur_création_e_mail:
MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
Resume création_mail_exit

End Sub
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 mai 2009 à 21:52
0
Utile
1
Le code est correct mais il convient de modifier :

For i_destinataire = 0 To UBound(destinataires)
en
For i_destinataire = 0 To UBound(destinataires) - 1
pour résoudre le premier message d'erreur suivant: "erreur envoi e-mail -2147467259 Impossible de reconnaître un ou plusieurs noms".

Pour le message d'erreur :"propriété ou méthode non gérée par cet objet", qui indique qu'il ne trouve pas la procédure test2 dans outlook VBA, cette erreur se produit également si les macros dans l'application Outlook sont désactivées.
Il faut donc vérifier dans le menu outils --> macro --> sécurité, l'option retenue.
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 25 mai 2009 à 12:03
Bonjour thev, et merci encore de ton aide.

J'ai fait les modifications que tu m'as conseillées. Effectivement je n'avais pas pensé à modifier la sécurité des macros sous Outlook. J'ai mis au niveau faible, mais ça plante toujours. En cherchant, je suis allée dans Outil --> Macro --> Sécurité, onglet "Editeurs approuvés". Le certificat à mon nom y est bien, mais je ne peux pas cocher "Faire confiance au projet Visual Basic", alors que sous Excel il est coché pour pouvoir exécuter certains programmes. Serait-ce la cause du blocage?
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 25 mai 2009 à 21:44
0
Utile
1
Je ne pense pas. Vérifie les bibliothèques chargées dans Outlook via l'éditeur VB : outils --> références. peut-être en manque-t-il une.
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 26 mai 2009 à 09:38
Merci thev, effectivement le problème venait des références dans VB outlook. Désormais cela fonctionne! ;-) Je te remercie de ta patience.
Je me permets de te poser une autre question: je souhaite envoyer mon fichier Excel en fichier joint. Avant, j'utilisais le code suivant:
                
' Récupérer les mails des destinataires
Workbooks(FichierSource).Activate
Sheets("admin").Activate
MailAd = Range("H11").Value

' Aller sur le fichier à transmettre
Workbooks(NomFichier).Activate
                
' Ouvrir une page Outlook pour envoyer le fichier
Application.Dialogs(xlDialogSendMail).Show MailAd


Mais je ne sais pas comment adapter la dernière ligne de code par rapport au code que tu m'as proposé?
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 26 mai 2009 à 12:14
0
Utile
1
Je viens de rencontrer sous Outlook 2003 (j'avais testé sous Outlook 2007) le même souci de non accès à la procédure VBA Outlook. Cela venait du fait que le projet VBA Outlook n'était pas en ligne même si l'application OutlooK était chargée. Pour forcer la mise en ligne du projet VBA Outlook, ajouter dans VB Outlook / ThisOutlookSession :

Private Sub Application_Startup()

End Sub


pour la pièce jointe :

---- procédure Excel VBA ----------------- 
Sub test1 

' Récupérer les mails des destinataires 
Workbooks("test.xls").Activate 
Sheets("admin").Activate 
MailAd = Range("J11").Value 

sujet = "test01-sujet" 
message = "test01-message" 

'choix pièce jointe 
NomFichier= Application.GetOpenFilename

' appelle une sous-procédure Outlook VBA 
Set appli_Outlook = New Outlook.Application 
call appli_Outlook .test2(MailAd,sujet,message,NomFichier) 

end Sub 

-- procédure Outlook VBA ------ 
Sub test2(mail_liste,sujet,Message,NomFichier)

If NomFichier Then
        Set pièce_jointe = e_mail.Attachments
        pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
End If

 
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 26 mai 2009 à 16:43
Effectivement, en retestant d'exécuter la macro, ça ne fonctionnait plus. L'ajout du code:
Private Sub Application_Startup() 
End Sub 

a résolu le problème.

L'ajout du fichier en fichier jointe fonctionne également, j'ai juste relevé une toute petite erreur. Voici le code correct à ajouter dans VB Outlook/ macro test2:
If NomFichier <> "" Then
        Set pièce_jointe = e_mail.Attachments
        pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
End If


Tout fonctionne donc parfaitement! :-) Encore une fois, merci thev et bonne journée.
Je passe en résolu.
coklin 75 Messages postés mardi 23 décembre 2008Date d'inscription 30 août 2009 Dernière intervention - 20 juin 2009 à 12:42
0
Utile
Bonjour,


J'ai le même problème que Ludivine sur la même chose concernant le call du test2 en VB Outlook. J'aimerais comprendre surtout que je suis allé dans les références d'Outlook et que j'ai ajouté "MS Office Excel Library" et pareil Sous excel pour la library Outlook.

Je m'entraine à ce qu'a fait ludivine, donc j'envoie mon code pour mieux comprendre :

Sous VB Excel
Sub test1()

Workbooks("julieC - Irsem.xls").Activate

' Récupérer les mails des destinataires
Sheets("admin").Activate
MailAd = Range("N50").Value

'choix pièce jointe
NomFichier = Application.GetOpenFilename

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)

End Sub

Sous Outlook

Sub test2(MailAd)

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = Application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires) - 1
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = "Essai 1"
e_mail.Body = "Essai Message"

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
Exit Sub

' routine erreur
erreur_création_e_mail:
MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
Resume création_mail_exit

'Attachement pièce jointe
If NomFichier <> "" Then
Set pièce_jointe = e_mail.Attachments
pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
End If


End Sub

Je suis encore débutant, en espérant que vous pourrez m'aider

Bon week end

Coklin
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 20 juin 2009 à 20:29
0
Utile
Pour que la procédure sous Outlook soit reconnue, il faut que :

1- elle soit placée sous ThisOutlookSession,
2- que les macros sous outlook soient activées (voir onglet sécurité),
3- que outlook soit chargé,
4- que outlook vba soit chargé : pour cela rajouter sous ThisOutlookSession le code événement :

Private Sub Application_Startup()
End Sub


Par ailleurs, pour tester le chargement de outlook, le code sous excel doit être modifié ainsi :

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
    Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
Else
    MsgBox "erreur envoi e_mail car outlook non chargé"
End If
 
coklin 75 Messages postés mardi 23 décembre 2008Date d'inscription 30 août 2009 Dernière intervention - 25 juin 2009 à 10:26
0
Utile
Salut thev,

J'ai fait ce que tu m'as dit, ça a déjà pas mal avancé. Ce que je ne comprends pas c'est qu'au moment de lancer le programme, j'ai le message suivant qui s'affiche :

"erreur envoi e-mail -2147467259 Les zones A, CC, cci doivent contenir au moins un nom ou une liste de distribution"

Pourtant la case sélectionnée au départ est une adresse mail. Comment faire pour l'envoyer à cette adresse?

Merci encore


Coklin
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 25 juin 2009 à 11:39
0
Utile
1 - Les noms de variables ne correspondent pas

Sub test2(MailAd)

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = Application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(mail_liste, ";")


2- Par ailleurs, le nombre et la position des variables doivent être les mêmes dans la procédure et l'appel de procédure

Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier) -- appel procédure
4 variables : variable 1 = liste destinataires, variable2 = objet message, variable 3 = texte message, variable 4 = nom pièce jointe


Sub test2(MailAd) --- définition procédure
doit donc avoir 4 variables selon l'ordre ci-dessus
coklin 75 Messages postés mardi 23 décembre 2008Date d'inscription 30 août 2009 Dernière intervention - 25 juin 2009 à 12:47
0
Utile
Re Thev,

J'ai à nouveau suivi tes instructions, mais maintenant il me mets que l'objet n'appartient pas à la sélection.

Voici mon code pour le moment :

Sous Excel VBA:

Sub test1()

Workbooks("julieC - Irsem.xls").Activate
' Récupérer les mails des destinataires
Sheets("admin").Activate
MailAd = Range("N50").Value 'la valeur est une adresse mail
'sujet = "Test envoi"
'Message = "coucou, recevez-vous ce message?"
'Nomfichier = "Powerpoint"

'choix pièce jointe
NomFichier = Application.GetOpenFilename

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
MailAd = Range("N50").Value
sujet = "ESSAI"
Message = "coucou"
NomFichier = "Powerpoint"
Else
MsgBox "erreur envoi e_mail car outlook non chargé"
End If

End Sub


Sous outlook: (ThisOutlookSession)
Sub test2(MailAd, sujet, Message, NomFichier)
MailAd = Workbooks("JulieC - irsem.xls").Sheets("Admin").Range("N50").Value
sujet = "ESSAI"
Message = "coucou"
NomFichier = "Powerpoint"

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = Application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(Mail_liste, ";")
For i_destinataire = 0 To UBound(destinataires) - 1
e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = "Essai 1"
e_mail.Body = "Essai Message"

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
Exit Sub

' routine erreur
erreur_création_e_mail:
MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
Resume création_mail_exit

'Attachement pièce jointe
If NomFichier <> "" Then
Set pièce_jointe = e_mail.Attachments
pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
End If

End Sub

Private Sub Application_Startup()
End Sub

Quel est le pb docteur parce que j'ai du mal à comprendre la différence entre Mail_List, MailAd, etc.

Peux-tu m'expliquer un peu le pb et ai-je bien respecté ce que tu souhaitais que je fasse.


Merci d'avance et désolé de ne pas être très doué.

Coklin
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 25 juin 2009 à 13:42
0
Utile
Sous Excel VBA:

Sub test1()

Workbooks("julieC - Irsem.xls").Activate
' Récupérer les mails des destinataires
Sheets("admin").Activate
MailAd = Range("N50").Value 'la valeur est une adresse mail
sujet = "Test envoi"
Message = "coucou, recevez-vous ce message?"

'choix pièce jointe
'NomFichier = Application.GetOpenFilename

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
    Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
Else
    MsgBox "erreur envoi e_mail car outlook non chargé"
End If

End Sub


Sous outlook: (ThisOutlookSession)

Private Sub Application_Startup()
End Sub
Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe)

' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd)
' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet)
' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message)
' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier)

On Error GoTo erreur_création_e_mail

' crée l'objet : e_mail
Set e_mail = Application.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Split(Mail_liste, ";")
    For i_destinataire = 0 To UBound(destinataires) - 1
    e_mail.Recipients.Add destinataires(i_destinataire)
Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = objet_message
e_mail.Body = texte_message

'Attachement pièce jointe
If nom_pièce_jointe <> "" Then
    Set pièce_jointe = e_mail.Attachments
    pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe
End If

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
    Exit Sub

' routine erreur
erreur_création_e_mail:
    MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
    Resume création_mail_exit

End Sub
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 30 juin 2009 à 12:09
0
Utile
Bonjour à tous,

J'ai remis le nez dedans, et effectivement, j'ai eu le même message que Coklin:
"erreur envoi e-mail -2147467259 Les zones A, CC, cci doivent contenir au moins un nom ou une liste de distribution" .

Mais je n'ai pas toujours ce message!
1) Ma liste de destinataires est ainsi constituée:
colonne A colonne B
mdupont mdupont@gmail.com
Ludivine50 Ludivine50@gmail.com


Hypothèse: Ludivine50 est mon identifiant Windows.

Si je lance la macro avec cette liste, pas de problème. Mais cette liste est pour les tests.

2) Si j'enlève Ludivine50 de la liste, la macro ne fonctionne plus! J'ai le message d'erreur.
colonne A colonne B
mdupont mdupont@gmail.com


3) A noter, que je je fais la liste suivante:
colonne A colonne B
mdupont Ludivine50@gmail.com

J'ai aussi le message d'erreur. Il semblerait que le nom de l'identifiant windows doive être dans la liste des utilisateurs. Cocklin, as-tu un problème dans ce genre?
thev 1689 Messages postés lundi 7 avril 2008Date d'inscription 11 décembre 2017 Dernière intervention - 1 juil. 2009 à 09:53
0
Utile
2
1- si le destinataire est sous la forme mdupont ou ludivine50, ce nom doit se trouver dans le carnet d'adresses Outlook

2- l'instruction : destinataires = Split(Mail_liste, ";") suppose que l'ensemble des destinataires soit fourni dans une seule cellule sous la forme : mdupont@gmail.com; Ludivine50@gmail.com .
Si les destinataires sont mis en colonne, c'est une autre instruction qu'il faut utiliser.


ci-jointes les modifications à apporter si la liste des destinataires est parv exemple en colonne B


Sous Excel VBA:

Sub test1()

Workbooks("julieC - Irsem.xls").Activate
' Récupérer les mails des destinataires
Sheets("admin").Activate

'les adresses mail sont en colonne B
Set début_liste = Range("B1")
Set fin_liste = Range("B1").End(xlDown)
MailAd = Range(début_liste, fin_liste).Valuesujet = "Test envoi"
Message = "coucou, recevez-vous ce message?"
Call test2(MailAd, sujet, Message, NomFichier)

'choix pièce jointe
NomFichier = Application.GetOpenFilename

' appelle une sous-procédure Outlook VBA
Set appli_Outlook = Outlook.Application
If appli_Outlook.Explorers.Count > 0 Then
    Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
Else
    MsgBox "erreur envoi e_mail car outlook non chargé"
End If

End Sub


Sous outlook: (ThisOutlookSession)

Private Sub Application_Startup()
End Sub
Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe)

' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd)
' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet)
' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message)
' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier)

On Error GoTo erreur_création_e_mail

Set appli_Outlook = Outlook.Application


' crée l'objet : e_mail
Set e_mail = appli_Outlook.CreateItem(olMailItem)

' ajoute les destinataires
destinataires = Mail_liste
For i_destinataire = 1 To UBound(destinataires)
    e_mail.Recipients.Add destinataires(i_destinataire, 1)Next i_destinataire

' remplit le sujet et le message
e_mail.Subject = objet_message
e_mail.Body = texte_message

'Attachement pièce jointe
If nom_pièce_jointe <> "" Then
    Set pièce_jointe = e_mail.Attachments
    pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe
End If

' envoie l'e-mail
e_mail.Send

' fin traitement
création_mail_exit:
    Exit Sub

' routine erreur
erreur_création_e_mail:
    MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
    Resume création_mail_exit

End Sub
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 1 juil. 2009 à 13:07
merci Thev,

pour le second point, j'utilisais un contournement pour que ça fonctionne:

colonne A colonne B colonne C (calculée automatiquement)
mdupont mdupont@gmail.com 'mdupont@gmail.com'
Ludivine50 Ludivine50@gmail.com 'mdupont@gmail.com','Ludivine50'@gmail.com'

et je prenais ma liste d'adresse dans la dernière de la colonne C!!

C'est un peu du bricolage, mais bon, ça fonctionne alors je vais garder cela pour ce programme. Par contre, la prochaine fois, je testerais celui que tu nous a proposé.
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 1 juil. 2009 à 13:48
Pour le premier point, je viens de tester. En fait, le problème, c'est quand j'ai une seule adresse. Malheureusement, parfois il y en aura parfois plusieurs, mais aussi parfois une seule.
Ludivine50 114 Messages postés lundi 9 février 2009Date d'inscription 1 février 2016 Dernière intervention - 6 juil. 2009 à 18:56
0
Utile
Salut,

je reviens vers vous pour savoir si vous avez des news par rapports aux problèmes évoqués.
Bonne soirée.
Ludivine