Envoi fichier par mail et Cci
Bonjour,
Je souhaite pouvoir, à partir d'un fichier excel comprenant plusieurs onglets, créer un fichier temporaire de l'onglet actif afin de n'envoyer que cet élément par mail (via outlook).
Enfin, je souhaite envoyer le mail à 2 destinataires (1 en destinataire principal et l'autre en copie cachée).
Je vous remercie pour vos conseils !
Bonsoir,
Un essai :
Option Explicit
Sub SendMail()
Dim Sh, nSh As Worksheet
Dim nWb As Workbook
Dim Obj, aApp, aMail As Object
Dim FilePath$
Set Sh = ThisWorkbook.Sheets(1) 'Choisir la sheet à envoyer.
Set nWb = Workbooks.Add()
Set nSh = nWb.Sheets(1)
Set Obj = CreateObject("WScript.Shell")
Set aApp = CreateObject("Outlook.Application")
Set aMail = aApp.CreateItem(0)
Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = Obj.SpecialFolders("Desktop") & "\" & "Nom_du_fichier.xlsx" 'Choisir le nom du fichier.
nWb.SaveAs FilePath 'On sauvegarde une copie sur le bureau que l'on détruira par la suite.
With aMail
.To = "mail@destinataire.com" 'à modifier
.BCC = "mail@copie_cachee.com" 'idem
.Subject = "Sujet_du_message" 'idem
.Body = "Corps_du_message" 'idem
.Attachments.Add FilePath 'On rajoute le fichier créé.
.Send 'ou .Display pour afficher le mail.
End With
nWb.Close 'On ferme le fichier...
Kill FilePath 'et on le détruit.
Set Sh = Nothing
Set nSh = Nothing
Set nWb = Nothing
Set Obj = Nothing
Set aMail = Nothing
Set aApp = Nothing
End Sub
Après, il n'y a pas d'obligation à détruire le fichier envoyé si par exemple vous souhaitez conserver un historique...
Cordialement,
Darzou
Bonjour et merci pour la réactivité !
J'ai essayé avec le code envoyé mais il semble que ça bloque à cet endroit :
nWb.SaveAs FilePath 'On sauvegarde une copie sur le bureau que l'on détruira par la suite.
Voici le code présent dans la macro.
Je suppose que c'est un détail mais comme je suis débutant...
Sub SendMail()
Dim Sh, nSh As Worksheet
Dim nWb As Workbook
Dim Obj, aApp, aMail As Object
Dim FilePath$
Set Sh = ThisWorkbook.Sheets(1) 'Choisir la sheet à envoyer.
Set nWb = Workbooks.Add()
Set nSh = nWb.Sheets(1)
Set Obj = CreateObject("WScript.Shell")
Set aApp = CreateObject("Outlook.Application")
Set aMail = aApp.CreateItem(0)
Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = Obj.SpecialFolders("Desktop") & "\" & "Modèle Assurance.xls" 'Choisir le nom du fichier.
nWb.SaveAs FilePath 'On sauvegarde une copie sur le bureau que l'on détruira par la suite.
With aMail
.To = "T32" 'à modifier
.BCC = "T33" 'idem
.Subject = "Modèle Assurance" 'idem
.Body = "Ci-joint l'attestation d'assurance demandée." 'idem
.Attachments.Add FilePath 'On rajoute le fichier créé.
.Send 'ou .Display pour afficher le mail.
End With
nWb.Close 'On ferme le fichier...
Kill FilePath 'et on le détruit.
Set Sh = Nothing
Set nSh = Nothing
Set nWb = Nothing
Set Obj = Nothing
Set aMail = Nothing
Set aApp = Nothing
End Sub
Pour info, à la base je suis parti d'une macro existante qui semblait fonctionner mais qui ne permettait pas d'envoyer une copie cachée.
Sub Envoi_assurance()
'
Dim Wbk As Workbook
ThisWorkbook.Sheets("Modèle").Copy
Set Wbk = ActiveWorkbook
SendKeys "{E}"
Wbk.SendMail Recipients:=Workbooks("Modèle assurance").Worksheets("Modèle").Range("T32").Value, Subject:="Modèle assurance", ReturnReceipt:=True
Wbk.Close savechanges:=False
Set Wbk = Nothing
'
End Sub
Si vous écrivez msgbox filepath une ligne en dessous de filepath=... Qu est ce qui s'affiche ??
Pouvez vous aussi joindre un fichier que je vois comment sont organisées vos données puique vos champs .to et .bcc ne riquebr pas de fonctionner tels que vous les avez renseigné.
Cordialement,
Darzou
Bonjour,
Je suis novice mais ce problème m'as aussi été posé et enregistrant une macro sa ne marche pas ? Pcq pour enregistre automatiquement en PDF cela fonctionne donc peut être qu'on peut faire des envoie automatique d'une portion de classeur par outlook automatiquement.
Kant1 a écrit :Bonjour,
Je suis novice mais ce problème m'as aussi été posé et enregistrant une macro sa ne marche pas ? Pcq pour enregistre automatiquement en PDF cela fonctionne donc peut être qu'on peut faire des envoie automatique d'une portion de classeur par outlook automatiquement.
Bonjour,
A mon sens, peut-être me trompe-je mais pour envoyer un fichier en pj, il faut qu'il existe. Une portion de fichier comme vous dites ne constitue pas un soi un nouveau fichier à moins de le créer. Aussi, pour envoyer une portion de fichier il est nécessaire de créer un fichier qui reprendra la portion du fichier source (à moins de supprimer la portion du fichier source que l'on ne souhaite pas envoyer). Il devient également nécessaire de le sauvegarder si l'on souhaite lui attribuer un nom. J'ai précisé en pj puisqu'il est autrement possible de coller le contenu d'une worksheet dans le corps du mail (mais ce n'est pas toujours joli à voir).
Cordialement,
Darzou
Lorsque je copie le texte msgbox filepath, il y a juste un doc excel vierge qui s'ouvre avec le message précisant l'adresse d'accès à mon document et je ne peux rien faire.
Je t'ai mis en PJ un imprim écran (fichier trop gros). Mais je peux te l'envoyer si tu me donnes un mail.
L'onglet modèle (que je veux envoyer) va chercher les infos dans Immatriculation.
La cellule T32 va chercher l'adresse mail du salarié dans la base et la T33 c'est l'adresse mail à laquelle je veux que ce soit également envoyé le mail en CCi.
Hum...
Bon on va faire sans le bureau ça doit être par là que ça bloque. Mais sinon je ne vois pas trop...
Option Explicit
Sub SendMail()
Dim Sh, nSh As Worksheet
Dim nWb As Workbook
Dim aApp, aMail As Object
Dim FilePath$
Set Sh = ThisWorkbook.Sheets("Modèle") 'choisir la bonne feuille
Set nWb = Workbooks.Add()
Set nSh = nWb.Sheets(1)
Set aApp = CreateObject("Outlook.Application")
Set aMail = aApp.CreateItem(0)
Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = "choisir_un_path\" & "Modèle Assurance.xls" 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
nWb.SaveAs FilePath 'On sauvegarde une copie.
With aMail
.To = range("t32")
.BCC = range("t33")
.Subject = "Modèle Assurance"
.Body = "Ci-joint l'attestation d'assurance demandée."
.Attachments.Add FilePath 'On rajoute le fichier créé.
.Send 'ou .Display pour afficher le mail.
End With
nWb.Close 'On ferme le fichier...
Kill FilePath 'et on le détruit.
Set Sh = Nothing
Set nSh = Nothing
Set nWb = Nothing
Set aMail = Nothing
Set aApp = Nothing
End Sub
Sinon le path qui remontait dans la msgbox était correct ??
Cordialement,
Darzou
J'aimerais dire que ça fonctionne mais malheureusement ça coince à ce niveau :
nWb.SaveAs FilePath 'On sauvegarde une copie.
Le débogage met cette ligne là en jaune...
C'est grave docteur ?
bonjour,
je viens de tester le code et ça fonctionne à la perfection. bon, pour ma part il me met le mail dans les indisérable mais je pense que c'est qu'une question de paramètre d'outlook...
as-tu bien mis les lignes de code à jour, par exemple le chemin :
FilePath = "choisir_un_path\" & "Modèle Assurance.xls" 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
"choisir un path" veut dire un chemin ex : c:mes docuements\
Francky
Quel boulet !!
Merci beaucoup, ça marche...
En tout cas, très bon site. Je crois que je vais reprendre les bases avec les cours dispo sur ce site !
Bonjour Darzou , ton code ( premier envoyé) fonctionne très bien et merci ça m'aide , cependant je voudrai envoyé à plusieurs destinataires (8 adresses mail) , merci de m'aider si tu lis mon message , bien cordialement.
Lol, 3 ans plus tard content de savoir que ma prose sert toujours ! Ça fait plaisir ! Par chance j'ai eu droit à une notification par mail et je me souvenais mes identifiants ! Donc, à l'aveugle je dirais :
.To = "mail@destinataire.com;mail2@destinataire.com;mail3@destinataire.com"
Jusqu'au 8ème mail ou avec "," en séparateur à la place de ";"
Maxime
Merci Darzou et encore merci pour ce code