VBA : Envoyer un Email via Outlook 2007



Le dernier article nous a permis d’appréhender la relation entre Excel et un navigateur Web, voici comment gérer la relation entre Excel et votre messagerie Outlook…


- 1 – Dans cet exemple l’utilisateur veut à partir de son classeur actif, envoyer par mail un autre classeur Excel qu’il choisira sur son disque dur. Le programme lui demandera l’adresse Email du destinataire puis effectuera l’envoie en arrière plan.
 
- 2 – Pour un bon fonctionnement du programme vous aurez bien sur au préalable chargé la bibliothèque des objets Outlook. (Si vous n’êtes pas sur de la démarche, lisez l’article du 9 Mai 2009)

- 3 –Voici le code, à vous de l’adapter.
Sub envoiEmail()
Dim appOutlook As Outlook.Application
Dim message As Outlook.mailitem
Dim Adresse As String
Dim ouverture$
On Error GoTo sierreur:
'Lance une session OutLook
Set appOutlook = CreateObject("outlook.Application")
'Demande de l'adresse email du destinataire
Adresse = InputBox("Entrez une adresse Email ?", "Envoyer un Email")
'Crée un nouveau message
Set message = appOutlook.createitem(olMailItem)
With message 'paramétrons le message
.Subject = "ENVOYER UN MAIL A PARTIR D'EXCEL"
'Paramétrage du champ Objet :
.Body = "Ceci est le corps du message" & Chr(13) & "Cordialement" & Chr(13) & "Olivier"
'Paramétrage du corps du texte contenu et signature
.BodyFormat = olFormatHTML
'Choix du format du message ici html
.Recipients.Add (Adresse)
'Ajout de l'adresse dans le champ A...
ouverture = Application.GetOpenFilename( _
filefilter:="Fichiers Excel (*.xls),*.xls", _
Title:="Ouvrir", _
MultiSelect:=False)
Workbooks.Open ouverture
'Ouverture du classeur choisi pour être envoyé en pièce jointe
.Attachments.Add ouverture
'Paramétrage du champ Attaché :
.send
'Envoie du message
ActiveWorkbook.Close
'Fermeture du classeur choisi pour être envoyé en pièce jointe
End With
appOutlook.Quit
'fermeture de Outlook
Set appOutlook = Nothing
'J’ai du gérer l'erreur du au clic sur le bouton annuler du inputbox
sierreur:
MsgBox "Vous devez saisir une adresse Email" & Chr(10) _
& "puis cliquer sur OK", vbOKOnly + vbCritical, "ATTENTION"
End Sub




5 commentaires:

Anonyme a dit…

Bonjour Olivier
Merci bien pour cette belle idée... bon j'essai masi je n'y arrive pas... je suis pas super fort en excel, mais j'aimerai réussir cette macro.
sur le point 3 : je met ou le code ? je dois ouvrie VBA et enregistrer ? mais dans quoi quel classeur ?
Et bien si tu as un peu de temps, ce serai sympa de me décrire les étapes avant celles que tu as indiqué.

Merci
Michael.

Salvatore a dit…

Cette macro fonctionne bien, mais comment peut-on faire pour utiliser un mail formatté avec entête et signature.

Merci
Salvatore

Anonyme a dit…

Merci pour ce code !!!

Anonyme a dit…

Bonjour Olivier,
Mon problème est que mon nouveau PC est équipé d'Outlook 2007 et que le code suivant fonctionne parfaitement avec outlook express. Comment modifier ce code pour l'adapter à outlook 2007.
Merci pour l'aide
Amicalement
ajca


'Envoi de la feuille de match "Bocage email Libre.xls" par courriel
Dim Dest, Sujt, Msg As String
Dim RepName
RepName = "C:\Documents and Settings\Billard Club\Bureau\VETERANS\LIBRE\BOCAGE\Bocage email Libre.xls"
Dest = "anonyme@anonyme.fr"
Sujt = "envoi résultats libre vétérans"
Msg = "Bonjour et bonne réception"
Shell "C:\Program Files\Outlook Express\msimn.exe " & _
"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""
SendKeys "%I" & "p" & RepName & "~" & "%s"
CommandButton3.Enabled = False
If Range("K4") <> "1656" And Range("W4") = "1656" Then
CommandButton4.Enabled = False
Else
CommandButton4.Enabled = True
End If
End Sub

Anonyme a dit…

Bonjour,
peut-être que vous pourriez m'aider pour la macro que je souhaite faire.
J'ai creé un classeur me permettant de faire le suivi des dépenses du pôle restauration.
j'ai saisi dans une cellule une formule:"SI", si le montant des écarts de l'année "n" était supérieur au montant de l'année n-1.
En si le montant de l'année "n" est supérieur au montant de l'année n-1, alors le mot "alerte" s'affiche. (voici ma formule: =SI(SOMME(M97;P97)>SOMME(K97;N97);"ALERTE";"").

Et je voudrais que si cette cellule affiche "alerte", alors une macro s'active pour envoyer un mail à ma responsable et avec un message déja enregistrer comme "alerte les depenses ont augmenté ces trois derniers mois". (Sans que j'intervienne. ni pour ouvrir la boite mail, ni pour écrire le message, ni pour écrire l'adresse mail, ni pour fermer la boite mail.)
Merci

Enregistrer un commentaire

top