Une petite question sur l'envoi d'un mail via Outlook.
Contexte :
Via un formulaire ACCESS, j'alimente un fichier Word qui contient un certain nb de données :
Destinataires
Objet
Corps de message
Ces données sont utilisées comme modèles pour envoyer un mail (à base de copier/coller, etc ...)
Ce que je tente de faire :
Pourquoi s'embêter à faire un copier / coller des différents champs alors qu'au lieu d'alimenter un fichier Word, je pourrais alimenter directement un nouveau message dans Outlook.
J'ai trouvé différentes source, dont celle de DarkCid qui répond en partie à mon besoin :
Dim objOutlook As New Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
.To = "toto@toto.fr"
.Subject = "Objet du message"
.Body = "Texte du message"
.Send
End With
Set objOutlookMsg = Nothing
Avec ce code, effectivement, je peux envoyer un mail. Le soucis, c'est que c'est transparent, ça ne s'affiche pas à l'écran.
Etant une flèche, ce que je voudrais en fait générer, c'est une fenêtre Nouveau message pré-remplie, à moi de l'envoyer si les champs sont correctements remplis (ne jamais envoyer un mail à une liste de chefs sans avoir au préalable relu 3 fois celui-ci :p).
Pour bloquer l'envoi du mail, il suffit que je bloque le .send
Par contre, comment faire pour que le mail ainsi crée soit visible ?
A priori, la propriété .visible n'existe pas pour l'objet Outlook dans VBA.
Et est-ce que ça suffirait à faire apparaître ma fenêtre Nouveau Message ? Ou l'objet que je déclare n'est pas bon ?
D'avance merci.
Molenn
A voir également:
Envoi de mail via Outlook : Rendre le mail visible
Tu pourrais aussi utiliser l'API ShellExecute qui lancerait
l'application de courriel par défaut, pas nécessairement Outlook.
Efficace s'il n'y a pas de fichier joint.
Déclaration dans un module ou en entête de formulaire:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
(ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As
String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long
C'est magique !!! C'était bien la propriété Display.
Merci encore.
C'est ma paye qui va être contente, ça va m'éviter d'envoyer des bêtises à toute la hiérarchie de manière automatique, et sans que je le sache en plus ! :p
Molenn
P.S. : Pour l'API, il est possible que ça fonctionne, mais je n'ai pas essayé. Le display répondant à mon attente et étant nettement plus simple à utiliser ^^ (sans compter que je n'ai jamais utiliser une API de ma vie : je préfère ne pas trop me compliquer pour le moment :) )
Dim objOutlook As New Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
.To = "toto@toto.fr"
.Subject = "Objet du message"
.Body = "Texte du message"
.Send
End With
Set objOutlookMsg = Nothing
et il me fait une erreur "type defini par l'utilisateur non défini" lors du 1° "dim"