Vba, envoi mail avec 2 pieces jointe Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Alex777f
Membre habitué
Membre habitué
Messages : 72
Appréciation reçue : 1
Inscrit le : 1 janvier 2019
Version d'Excel : 2010

Message par Alex777f » 1 janvier 2019, 17:06

Bonjour a tous
Je viens pour une premiere pub demander votre aide pour automatiser l'envoi d'un mail via outlook a partir d'excel.
J'aimerais, en cliquant sur un bouton envoyer un mail, a plusieurs personne avec 2 pieces jointe dispo sur mon disque dur et un corps de message.
En esperant avoir une proposition je vous souhaite bonne année 2019.
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 1 janvier 2019, 17:37

Hello,

Le mieux serait d'avoir ton fichier test avec la dénomination exacte, les noms de tes fichiers à joindre, l'emplacement etc ...
Ce mail sera-t-il envoyé toujours aux mêmes personnes ?
Un corps de message est-il nécessaire ?

On peu faire plein de chose mais il faut les infos nécessaires :mrgreen:

Bonne année à toi aussi !
Avatar du membre
Alex777f
Membre habitué
Membre habitué
Messages : 72
Appréciation reçue : 1
Inscrit le : 1 janvier 2019
Version d'Excel : 2010

Message par Alex777f » 1 janvier 2019, 17:57

Bonjour Ergotamine
Merci pour l'interet. Ci joint un fichier representatif.
rapport.xlsm
(12.6 Kio) Téléchargé 4 fois
Le mail sera envoyer envoyé aux meme personnes selon la liste d'adresse en feuille "adress". Cette liste sera limitée a 10 adresse.
Un corps de message est souhaitable.
Merci d'avance
A
Andre13
Membre impliqué
Membre impliqué
Messages : 1'420
Appréciations reçues : 88
Inscrit le : 13 juillet 2017
Version d'Excel : 2007-2013

Message par Andre13 » 1 janvier 2019, 18:00

Bonjour,
si en attendant cela peut aider:
vu ici Youtube ici merci à Romulad
Sub envoiMail()
Dim fichiers as Variant
On Error Goto plouf
fichiers = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

MsgBox fichiers  ' msgbox facultatif mais conseillé
Dim mypost, myCourriel As Object

Set mypost = CreateObject("Outlook Application")
Set myCourriel = mypost.CreateItem(0)
myCourriel.To = "testexcel@excel.fr" 
' myCourriel.CC = "testexcel@excel.fr"  

myCourriel.Attachments.Add fichiers
myCourriel.Subject="TEST MAIL par Pièce jointe"           ' on modifie ici

contient ="Bonne année 2019, "
contient = contient & Chr(10) & Chr(13)
contient = contient & "Ci-joint le doc, passez une agréable heureuse année 2019."
myCourriel.Body = contient
myCourriel.Send
Set mypost = Nothing
MsgBox " Envoyé avec Succès!"

plouf:
MsgBox "Erreur !!!"
End Sub
crdlt,
André
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 1 janvier 2019, 18:36

Re,

Ton code :
Sub Envoi()

Dim olmail As MailItem
Dim Destinataires As String

For i = 1 To Worksheets("Adress mail").Range("A" & Rows.Count).End(xlUp).Row
    Destinataires = Destinataires & ";" & Worksheets("Adress mail").Range("A" & i).Value
Next i
    
Set App = New Outlook.Application
Set olmail = App.CreateItem(olMailItem)
    With olmail
     .To = Destinataires
     .Subject = "Rapport du mois"
     .Body = "Bonjour," & Chr(10) & Chr(10) & "Veuillez trouver ci-joint le rapport du mois"
     .Attachments.Add "C:\Rapport\decembre.xlsx"
     .Attachments.Add "C:\Rapport\decembre.pdf"
     .Display '.Send     'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
    End With
End Sub
A noter qu'il est possible d'automatiser les envois des pièces jointes, par exemple en précisant le nom du mois à envoyer sur ton fichier qui ira directement le chercher dans le répertoire.

PS : Il faut que tu actives les références outlook dans ton éditeur VBA pour que la macro fonctionne : ALT + F11 --> Outils --> Références --> Microsoft Outlook Object Librabry

Cordialement,
Avatar du membre
Alex777f
Membre habitué
Membre habitué
Messages : 72
Appréciation reçue : 1
Inscrit le : 1 janvier 2019
Version d'Excel : 2010

Message par Alex777f » 1 janvier 2019, 19:12

Merci à vous.
Ergotamine ca marche, merci.
Comment devrais je proceder pour automatiser l'envoi du message chaque mois?
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 1 janvier 2019, 19:22

Hello,

Un exemple.
Ainsi si dans ton répertoire rapport tu appelles tes fichiers :
2018_decembre.xslx et 2018_decembre.pdf, que tu mets 2018 en A1 et decembre en A2, il devrait récupérer les bons fichiers.

Je te conseille même de mettre 2018_12.xslx et 2018_12.pdf pour pouvoir profiter du classement simplifié dans ton dossier rapport :mrgreen: (dans ce cas modifie la liste de validation sur l'excel joint).

Tu as compris la logique ?

Bonne soirée !

:btres:
rapport.xlsm
(21.88 Kio) Téléchargé 3 fois
1 membre du forum aime ce message.
Avatar du membre
Alex777f
Membre habitué
Membre habitué
Messages : 72
Appréciation reçue : 1
Inscrit le : 1 janvier 2019
Version d'Excel : 2010

Message par Alex777f » 1 janvier 2019, 19:36

Ok, oui je comprend la logique :lole: , je teste et je te reviens.
Merci encore
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 1 janvier 2019, 19:38

J'ai du corriger le code, j'avais fait des erreurs de débutant :
Sub Envoi()

Dim olmail As MailItem
Dim Destinataires As String
Dim Mois As String
Dim Annee As String

Annee = Worksheets("Feuil1").Range("B1").Value
Mois = Worksheets("Feuil1").Range("B2").Value
For i = 1 To Worksheets("Adress mail").Range("A" & Rows.Count).End(xlUp).Row
    Destinataires = Destinataires & ";" & Worksheets("Adress mail").Range("A" & i).Value
Next i

On Error GoTo Erreur

Set App = New Outlook.Application
Set olmail = App.CreateItem(olMailItem)
    With olmail
     .To = Destinataires
     .Subject = "Rapport du mois"
     .Body = "Bonjour," & Chr(10) & Chr(10) & "Veuillez trouver ci-joint le rapport du mois"
     .Attachments.Add "C:\Rapport\" & Annee & "_" & Mois & ".xlsx"
     .Attachments.Add "C:\Rapport\" & Annee & "_" & Mois & ".pdf"
     .Display '.Send     'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
    End With
Exit Sub

Erreur:
MsgBox "Une erreur s'est produite, mail non généré", vbCritical

End Sub
J'y ai ajouté une msgbox en cas d'erreur.
2 membres du forum aiment ce message.
Avatar du membre
Alex777f
Membre habitué
Membre habitué
Messages : 72
Appréciation reçue : 1
Inscrit le : 1 janvier 2019
Version d'Excel : 2010

Message par Alex777f » 1 janvier 2019, 22:01

Salut Ergotamine
J'ai essayé ca marche du tonerre.

Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message