VB Excel OUTLOOK liste adresses mails
Résolu/Fermé
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
13 mai 2009 à 18:05
Ludivine50 Messages postés 114 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 1 février 2016 - 6 juil. 2009 à 18:56
Ludivine50 Messages postés 114 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 1 février 2016 - 6 juil. 2009 à 18:56
A voir également:
- VB Excel OUTLOOK liste adresses mails
- Liste déroulante excel - Guide
- Creer adresse mail outlook - Guide
- Formule excel - Guide
- Excel liste déroulante en cascade - Guide
- Nouveau outlook - Guide
20 réponses
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
18 mai 2009 à 18:38
18 mai 2009 à 18:38
Personne n'a une idée pour me sortir de mon problème?
thev
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
19 mai 2009 à 01:23
19 mai 2009 à 01:23
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
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
19 mai 2009 à 14:45
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
Mais toujours bloqué. :-(
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
19 mai 2009 à 16:33
19 mai 2009 à 16:33
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, ....
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
19 mai 2009 à 19:59
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
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
19 mai 2009 à 23:44
19 mai 2009 à 23:44
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.
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
20 mai 2009 à 10:33
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
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
thev
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 mai 2009 à 10:56
20 mai 2009 à 10:56
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
2 raisons :
1- l'application Outlook n'est pas démarrée,
2- la procédure test2 ne setrouve pas sous ThisOutlookSession
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
20 mai 2009 à 11:49
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.
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 mai 2009 à 12:03
20 mai 2009 à 12:03
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.
' 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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 mai 2009 à 13:21
20 mai 2009 à 13:21
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)
' 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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
20 mai 2009 à 14:12
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...)
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 mai 2009 à 16:43
20 mai 2009 à 16:43
Je crois que le mieux est de reposter le code exact que tu utlises .
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
20 mai 2009 à 18:41
20 mai 2009 à 18:41
Dans un module de mon fichier .xls
Dans VB Outlook / ThisOutlookSession
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 mai 2009 à 21:52
20 mai 2009 à 21:52
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.
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
25 mai 2009 à 12:03
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?
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
25 mai 2009 à 21:44
25 mai 2009 à 21:44
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
26 mai 2009 à 09:38
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:
Mais je ne sais pas comment adapter la dernière ligne de code par rapport au code que tu m'as proposé?
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
26 mai 2009 à 12:14
26 mai 2009 à 12:14
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 :
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
26 mai 2009 à 16:43
26 mai 2009 à 16:43
Effectivement, en retestant d'exécuter la macro, ça ne fonctionnait plus. L'ajout du code:
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:
Tout fonctionne donc parfaitement! :-) Encore une fois, merci thev et bonne journée.
Je passe en résolu.
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
Messages postés
75
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
30 août 2009
20 juin 2009 à 12:42
20 juin 2009 à 12:42
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
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
20 juin 2009 à 20:29
20 juin 2009 à 20:29
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 :
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
Messages postés
75
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
30 août 2009
25 juin 2009 à 10:26
25 juin 2009 à 10:26
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
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
25 juin 2009 à 11:39
25 juin 2009 à 11:39
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
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
Messages postés
75
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
30 août 2009
25 juin 2009 à 12:47
25 juin 2009 à 12:47
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
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
25 juin 2009 à 13:42
25 juin 2009 à 13:42
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
30 juin 2009 à 12:09
30 juin 2009 à 12:09
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?
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
Messages postés
1851
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 avril 2024
681
1 juil. 2009 à 09:53
1 juil. 2009 à 09:53
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
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
1 juil. 2009 à 13:07
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é.
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
1 juil. 2009 à 13:48
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
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
6 juil. 2009 à 18:56
6 juil. 2009 à 18:56
Salut,
je reviens vers vous pour savoir si vous avez des news par rapports aux problèmes évoqués.
Bonne soirée.
Ludivine
je reviens vers vous pour savoir si vous avez des news par rapports aux problèmes évoqués.
Bonne soirée.
Ludivine