Envoi mail en vba avec corps message

danbenzi

XLDnaute Nouveau
Bonjour à tous,

Je voudrai inclure un corps de message à l'envoi d'un fichier joint via excel en vba.
J'ai une macro où il y a bien le corps du message mais pas le fichier joint.
C'est celle-ci:
Code:
Sub EnvoiFeuilCalculMail() 

Dim Copie As String 
Dim Destinataire As String 
Dim ObjetMessage As String 
Dim CorpsMessage As String 
Dim EnvoiDirect As Boolean 


Set Wbk = ActiveWorkbook 

ObjetMessage = "P1 du " & Range("H4").Value 
Destinataire = Range("G68").Value 
Copie = Range("G72").Value 

'Désactivation de la mise à jour de l'écran 
Application.ScreenUpdating = False 

'Crée le corps du message avec insertion de sauts de ligne 
CorpsMessage = "Bonjour Olivier" & vbCrLf & vbCrLf _ 
& "Veuillez trouvez ci-joint le P1" & Range("C74").Value & vbCrLf & vbCrLf _ 
& "Cordialement " & vbCrLf _ 
& "Prénom Nom " & vbCrLf _ 
& "Grade" & vbCrLf & vbCrLf _ 
& "Etablissement " & vbCrLf _ 
& Range("G74").Value & vbCrLf _ 
& Range("G75").Value & vbCrLf _ 
& Range("G76").Value & vbCrLf & vbCrLf _ 
& Range("G68").Value & vbCrLf _ 


'Demande à l'utilisateur s'il souhaite ou non vérifier le mail 
If MsgBox("Souhaitez-vous envoyer le mail directement sans vérification ?", 36, "Confirmation") = 6 Then 
EnvoiDirect = True 
Else 
EnvoiDirect = False 
End If 

'Lance le programme Outlook Express 
Shell "C:\Program Files\Outlook Express\msimn.exe " & _ 
"/mailurl:mailto:" & Destinataire & _ 
"?subject=" & ObjetMessage & _ 
"&Body=" & CorpsMessage, vbMaximizedFocus 


'Message confirmant l'envoi du mail avec précision de l'heure d'envoi 
MsgBox "Message envoyé avec Outlook Express à " & Format(Time(), "hh:mm"), vbOKOnly, "Opération réussie" 

'Réactivation de la mise à jour de l'écran 
Application.ScreenUpdating = True 

Range("B9").Select 

End Sub

et un autre code où il y a le fichier joint mais pas le corps de message c'est celui-ci:
Code:
Sub EnvoiMail() 
Dim i As Workbook 
Set i = ActiveWorkbook 
Dim Destinataire As String 
Dim Texte As String 
i.SendMail Recipients:=Range("G87").Value, Subject:="P1 du 5974", ReturnReceipt:=True 
Bcc = Range("G91") 

'Crée le corps du message avec insertion de sauts de ligne 
Texte = "Bonjour Olivier" & vbCrLf & vbCrLf _ 
& "Veuillez trouvez ci-joint le P1" & Range("C94").Value & vbCrLf & vbCrLf _ 
& "Cordialement " & vbCrLf _ 
& "Prénom Nom " & vbCrLf _ 
& "Grade" & vbCrLf & vbCrLf _ 
& "Les Floralies " & vbCrLf _ 
& Range("G94").Value & vbCrLf _ 
& Range("G95").Value & vbCrLf _ 
& Range("G96").Value & vbCrLf & vbCrLf _ 
& Range("G87").Value & vbCrLf _ 

Range("B9").Select 

End Sub

J'ai essayé de combiner les deux formules mais je n'y arrive pas.
Quelqu'un pourrait me dire ce qui cloche. Merci.

Cordialement
Dan
 

danbenzi

XLDnaute Nouveau
Re : Envoi mail en vba avec corps message

Bonjour Bruno,

Merci pour cette réponse toute fois très expéditive et sèche.
Je connais les règles du forum, c'est en connaissance de cause que j'ai fait ce post. Je sais que le sujet est mainte fois traité mais si tu vois bien, j'ai apporté deux codes qui fonctionnent qu'à moitié et j'ai demandé juste de l'aide pour que l'on m'explique ce qui cloche, je ne demande pas comme l'on me donne un code tout fait, j'ai déjà fait ses recherches et adaptés à mes besoins.

Cordialement
Dan
 

MJ13

XLDnaute Barbatruc
Re : Envoi mail en vba avec corps message

Bonjour Dan, Bruno

Dan: Regarde peut-être la:

https://www.excel-downloads.com/threads/envoie-de-mail-en-vba.155015/

Ou la:

https://www.excel-downloads.com/thr...mail-outlook-express-par-windows-mail.108052/

Ou encore la:

https://www.excel-downloads.com/threads/envoi-classeur-via-outlook-express.136432/

Sinon Dan, ce serait bien que tu mettes Outlook Express dans le titre de ton premier message (en le rééditant) pour des recherches futures. Bien sur si tu n'a s pas la solution ou/et que tu ne la donnes pas, ce ne sera pas la peine :eek:.
 
Dernière édition:

danbenzi

XLDnaute Nouveau
Re : Envoi mail en vba avec corps message

Bonjour Michel,

Merci pour ta réponse et les liens qui sont très instrutifs.
J'ai trouvé avec de l'aide un code qui fonctionne avec le FAI sans passer par outlook, le voici:

Option Explicit

Code:
Sub EnvoiMail()
Dim messageHTML As Variant
Dim objMessage As Variant
Dim piece_jointe As Variant
             'crée le fichier à envoyer
Dim chemin, nom As String
chemin = ActiveWorkbook.Path
nom = "Planning.xls"                'Nom du fichier à envoyer

ThisWorkbook.ActiveSheet.Copy       'Copie la feuille dans le fichier à envoyer
Sheets(1).DrawingObjects.Delete     'Supprime les boutons
            'Supprime les formules et fixe les valeurs

Range("K52:K56").Clear        'Efface les données sous de le planning
Range("K61:K64").Clear
Range("C62:C67").Clear
            'Enregistre le fichier à envoyer dans le même répertoire
ActiveWorkbook.SaveAs chemin & "\" & nom
Application.DisplayAlerts = False   'Supprime l'alerte Enregistrer
ActiveWorkbook.Close                'Ferme le fichier
Application.DisplayAlerts = True    'Rétabli les alertes Enregistrer

On Error GoTo errorHandler
Set objMessage = CreateObject("CDO.Message")

objMessage.Subject = "P1 du " & Range("H4").Value
objMessage.From = Range("K52").Value  'adresse mail de l'expéditeur n'est pas obligatoire
objMessage.To = Range("K54").Value 'Email du destinataire doit-être correct ici
objMessage.Cc = Range("K56").Value    'Email du destinataire en copie
        'Crée le corps du message avec insertion de sauts de ligne
objMessage.TextBody = "Bonjour" & " " & Range("C62").Value & "," & vbCrLf & vbCrLf _
& "Veuillez trouvez ci-joint le P1 " & Range("C64").Value & "." & vbCrLf & vbCrLf _
& "Cordialement " & vbCrLf _
& Range("C66").Value & vbCrLf _
& Range("C67").Value & vbCrLf & vbCrLf _
& Range("C64").Value & vbCrLf _
& Range("K61").Value & vbCrLf _
& Range("K62").Value & vbCrLf _
& Range("K63").Value & vbCrLf _
& Range("K64").Value & vbCrLf & vbCrLf _
& Range("K52").Value
        'Sélectionnes la pièce à joindre
piece_jointe = ActiveWorkbook.Path & "\" & "Planning.xls"

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.free.fr" 'remplacer ici le smtp par celui de son fournisseur d'accés
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.AddAttachment (piece_jointe)
objMessage.Send
MsgBox "Le mail a été bien envoyé !" 'Confirmation de l'envoi
        'après l'envoi le fichier créé est supprimé
Kill ActiveWorkbook.Path & "\" & "Planning.xls"
        'si erreur on sort de la procédure
Exit Sub
errorHandler:
        'description de l'erreur survenue
MsgBox Err.Description
End Sub
Sujet résolu donc.

Cordialement
Dan
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
303
Réponses
16
Affichages
605

Statistiques des forums

Discussions
312 492
Messages
2 088 931
Membres
103 984
dernier inscrit
maliko67