Excel appelle Outlook : perdu !

dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010 - 24 août 2010 à 23:53
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013 - 3 sept. 2010 à 16:30
Bonjour
A partir d'un programme VBA Excel, je cherche à envoyer un mail via Outlook. Ce que j'ai écrit marche jusqu'au moment de l'envoi par .send où un message d'erreur apparaît :
"Erreur d'exécution 287 - Erreur définie par l'application ou par l'objet".
A noter que si j'ouvre Outlook avant d'utiliser mon programme Excel, je n'ai pas d'erreur et le mail part comme prévu
Voici mon programme car je séche :
Option Explicit
Public OutlookApp As Outlook.Application
Public MItem As Outlook.MailItem
Dim Adress As String
Dim Repres As String
Dim Civilite As String
Dim Module As String
Dim Msg As String

Sub Mail1()
'Récupérer les données de la feuille Mail
RecupDonnees
'Composer le message
Msg = "Bonjour " & Civilite & " " & Repres & vbCrLf & vbCrLf
Msg = Msg & "A la suite de notre contact téléphonique, vous trouverez en piéces jointes les modalités d'inscription à notre module de formation," & vbCrLf
Msg = Msg & "Dans l'attente de votre confirmation, veuillez recevoir mes salutations distinguées." & vbCrLf & vbCrLf
'Créer le mail et le transmettre
SendMail
End Sub

Sub RecupDonnees()
'Créer l'objet Outlook
Set OutlookApp = New Outlook.Application
'Obtenir les données
Worksheets("Mail").Activate
Adress = Range("B1").Value
Objet = Range("B2").Value
Repres = Range("B3").Value
Civilite = Range("B4").Value
Module = Range("B5").Value
End Sub

Sub SendMail()
'Créer le contenu du mail et le transmettre
Set MItem = OutlookApp.CreateItem(olMailItem)
With MItem
.To = Adress
.Subject = Objet
.Body = Msg
.Send 'c'est ici que cela bloque !!
End With
End Sub

Nota : les données sont dans une feuille Excel intitulée "Mail"

Voilà, une idée salvatrice serait trés appréciée.
Merci pour tout

13 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
25 août 2010 à 16:32
Salut
J'ai essayé ton prog il marche mais j'ai un
peu modifié
Sub RecupDonnees()
'Cr?er l'objet Outlook
Set OutlookApp = New Outlook.Application
'Obtenir les donn'es
Adress = "lol@gmail.com"
'Objet = Range("B2").Value
Repres = "answer to your message"
Civilite = "LOLAND PAYS DES LOL "
Module = "LOL"
End Sub
A l'execution du send j'ai une demande du outlook
que j'autorise l'envoie
toi tu lis les données des cellules de ta feuille
vérifies avec le debug (add watch) si les données sont correctes

ps j'utilise l'excel 2003 outlook express
0
dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010
26 août 2010 à 00:29
Bonsoir ShayW
J'ai reproduit ton programme lettre à lettre et cela ne change rien, j'ai toujours le même message
Je séche grave
J'utilise Outlook 2007 mais je ne vois pas le pourquoi du comment
une autre idée ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
26 août 2010 à 10:48
Bonjour
Premièrement il faut comprendre ce que dit l'erreur mais tu devrais exécuter le program
step by step (touche F8) et voir à quelle ligne
il s'arrete
Au fait comment a tu appellé la sub mail1?
Tiens j'ai encore testé ton code modifié et j'ai
reçu aussi l'erreur runtime error 287
quand j'exécute le prog à l'exécution du .send j'ai un dialogbox du outlook express qui s'ouvre avec le message ce programme essaye d'envoyer automatiquement un email ...
oui non help
si j'appuis sur oui le message est envoyé
mais si j'appuis sur non ou je ferme le dialogbox j'ai l'erreur runtime error 287
0
dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010
26 août 2010 à 23:20
Bonjour
Avec Outlook, point de dialogbox, direct l'erreur !
J'ai essayé d'appeler Mail1 de différentes maniéres (direct de ThisWorkbook, dans un UserForm, direct dans un module) et toujours le même probléme.
Ce qui m'étonne c'est que je n'ai aucun soucis si Outlook est ouvert.
Je ne sais pas quoi penser .....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
27 août 2010 à 13:49
C'est vraiment bizarre
Bizarre tu n'as pas de message d'outlook
Tu a marqué Ce qui m'étonne c'est que je n'ai aucun soucis si Outlook est ouvert
de quel outlook ouvert parles tu ?
j'ai essayé de comprendre la logique du code
il est possible que l'outlook chez toi est defini
differement c.a.d
j'ai dans mon pc outlook qui est defini avec tout
les parametres pour envoyer et recevoir les mails
quand tu écris Set OutlookApp = New Outlook.Application
c'est une autre instance du outlook (je pense)
pour cela à l'execution du send j'ai un message qui me dit qu'on essaye d'envoyer un email à ton nom voulez vous autorisé
je crois qu'il doit y avoir des ex de code dans le forum
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
27 août 2010 à 13:53
Quand tu reçois l'erreur tu as un message box
avec le bouton aide click le bouton
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
27 août 2010 à 15:27
Salut, la méthode que tu utilise, est basé sur une session active de Outlook, si la session n'est pas ouverte c'est normale qu'il n'arrive pas à envoyer, si tu veux envoyer ton mail sans que la session outlook soit ouverte il faut utiliser la méthode CDO
0
dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010
27 août 2010 à 23:10
Pour ShayW, l'aide me dit en résumé qu'un lien ne se fait pas entre 2 applications différentes, cela m'avance à rien !

Pour houtas, je ne connais pas la méthode CDO, tu peux m'en dire plus ? Merci.
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
28 août 2010 à 12:01
Ci-joint le code pour l'envoi du mail sans que Outlook soit ouvert
Sub envoi_mail()
Dim objMail As Object
Dim sDestination As String
Dim sDestinationCC As String
Dim sPieceJointe As String
Dim msgTitre As String
Dim msgTexte As String

Set objMail = CreateObject("CDO.message")

sDestination = "destinataire@gmail.com"
sDestinationCC = ""
sPieceJointe = ""
msgTitre = "Titre Mail"
msgTexte = "texte du mail"

With objMail
.From = "blabla@blabla.com" 'possibilité d'indiquer l'adresse mail que tu veux comme expediteur
.To = sDestination
.CC = sDestinationCC
.Subject = msgTitre
.HTMLBody = msgTexte

.configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "adresseserveursmtp" 'a remplacer par l'adresse de ton serveur smtp
'pour recuperer l'adresse du serveur smtp aller sur Outils/paramètres du compte, onglet messagerie double cliquer et la tu aura ton adresse de courrier sortant
.configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.configuration.Fields.Update
objMail.AddAttachment (sPieceJointe)
.Send
End With
End Sub
0
dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010
30 août 2010 à 23:48
Merci houtas, je teste cette semaine
J'ai par contre remplacé SEND par DISPLAY et dans ce cas, Outlook s'ouvre à tous les coups, fait apparaître le message voulu (tu peux donc éventuellement le modifier) avec les piéces jointes voulues et tu n'as plus qu'à l'envoyer (ou non si tu changes d'avis)
Cela me paraît aussi bien coller à mon besoin.
Je regarde les 2 solutions et je te dis
Encore merci.
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
2 sept. 2010 à 13:12
Salut

Le display permet d'afficher le message avant de l'envoyer, ceci dans le cas ou outlook est deja ouvert, dans ton premier code il n'ya pas d'ouverture d'outlook qui se fait, pas de saisi de login et mot de passe.
La méthode que je te propose passe directement par le server SMTP, donc sans qu'une session ne soit ouverte. Si Outlook est fermé le display ne marchera pas.
essaye de préciser ton besoin pour savoir si le mail doit être envoyé directement, ou vérifié avant l'envoi pour choisir ta méthode.
0
dlbminot Messages postés 6 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 2 septembre 2010
2 sept. 2010 à 23:20
Bonsoir,
J'ai revérifié l'utilisation de Display et comme je te l'indiquais, même non ouvert, Outlook s'ouvre à tous les coups pour demander l'envoi du message. Il suffit de cliquer sur envoi. Cette méthode me convient parfaitement car je peux personnaliser le message avant envoi. Je dois installer mon programme sur un micro d'un copain, je revérifiefai à nouveau que cela marche bien ailleurs. Qu'est ce qui te fait penser que cela ne peut pas s'ouvrir à tout coup ?
Encore merci pour ta méthode
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
3 sept. 2010 à 16:30
Salut ton Outlook est sûrement ouvert sur ta machine sinon le mail ne part pas et tu aura le message d'erreur suivant Erreur d'exécution 462: Le serveur distant n'existe pas ou n'est pas disponible.
Donc pour être sur et savoir si Outlook tourne ou pas, tu fais Ctrl Alt Suppr et tu va voir dans le gestionnaire des tâches, dans l'onglet applications.
A+
0
Rejoignez-nous