Excel appelle Outlook : perdu !

Signaler
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010
-
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013
-
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

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010

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 ?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010

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 .....
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Quand tu reçois l'erreur tu as un message box
avec le bouton aide click le bouton
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010

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.
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010

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.
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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.
Messages postés
6
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
2 septembre 2010

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
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

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+