Inserer le document Excel en piece jointe d'un mail
Bonjour,
Je me lance d'un projet pour facilité la vie a tous le monde sauf que je me retrouve bloquer.
j'ai réussi a créer le mails avec les informations du tableur excel mais je voudrais que le fichier excel s'enregistre aussi en pièce jointe en reprenant les Information contenu dans la cellule D4 & D7 . Pouvez-vous m'aider ? :)
Voici mon code :
Sub EmailWorkbook()
Dim SourceWB As Workbook
Dim DestinWB As Workbook
Dim OutlookApp As Object
Dim OutlookMessage As Object
Dim TempFileName As Variant
Dim ExternalLinks As Variant
Dim TempFilePath As String
Dim FileExtStr As String
Dim DefaultName As String
Dim UserAnswer As Long
Dim strbody As String
Dim strsubject As String
Dim strheader As String
Dim x As Long
Dim SUBMISSIONROW As Long
Dim SUBMISSIONCOLUMN As Long
Dim SUBMITMESSAGE As String
Dim STORENAME As String
Dim oOutlook As Object
Dim KIMBALL As String
Dim FILEDATE As String
On Error Resume Next
Set oOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0
If oOutlook Is Nothing Then
Shell ("OUTLOOK")
End If
Set SourceWB = ActiveWorkbook
'Determine Temporary File Path
TempFilePath = Environ$("temp") & "\"
'Determine Default File Name for InputBox
If SourceWB.Saved Then
DefaultName = Left(SourceWB.Name, InStrRev(SourceWB.Name, ".") - 1)
Else
DefaultName = SourceWB.Name
End If
'Create Instance of Outlook
On Error Resume Next
Set OutlookApp = GetObject(class:="Outlook.Application") 'Handles if Outlook is already open
err.Clear
If OutlookApp Is Nothing Then Set OutlookApp = CreateObject(class:="Outlook.Application") 'If not, open Outlook
If Err.Number = 429 Then
MsgBox "Outlook could not be found, aborting.", 16, "Outlook Not Found"
GoTo ExitSub
End If
On Error GoTo 0
'Create a new email message
Set OutlookMessage = OutlookApp.CreateItem(0)
'Ask user for a file name
TempFileName = strsubject
'Determine File Extension
If SourceWB.Saved = True Then
FileExtStr = "." & LCase(Right(SourceWB.Name, Len(SourceWB.Name) - InStrRev(SourceWB.Name, ".", , 1)))
Else
FileExtStr = ".xlsm"
End If
'Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
'Save Temporary Workbook
SourceWB.SaveCopyAs TempFilePath & TempFileName & FileExtStr
'Save Changes
If Time() < "17:00:00" Then
strheader = "Bonjour,"
Else
strheader = "Bonsoir,"
End If
strbody = strheader & vbNewLine & vbNewLine & "Ci joint les documents concernant l'évement du " & Range("D5").Text & " qui c'est déroulé à " & Range("D6").Text & " impliquant " & Range("D7").Text & " qui travaille à " & Range("D8").Text & " chez nous ." & "Pendant " & Range("D10").Text & " jours"
strbody = strbody & vbNewLine & vbNewLine & "Vous trouverez en pièce jointe l'extraction M en format PDF reprenant ses jours réelle de la période de J-1 a J+1."
strbody = strbody & vbNewLine & vbNewLine & "Nous restons a votre disposition pour toutes informations complémentaire."
strbody = strbody & vbNewLine & vbNewLine & "Cordialement,"
'Create Outlook email with attachment
On Error Resume Next
With OutlookMessage
.To = "email 1"
'.To = " email 1"
.CC =
.BCC = "email 2"
.Subject = "Investigation INC-XXX"
.body = strbody
.Attachments.Add DestinWB.FullName
.Display
'.send
'; "email 1"
End With
On Error GoTo 0
'Close & Delete the temporary file
Kill TempFilePath & TempFileName & FileExtStr
'Clear Memory
Set OutlookMessage = Nothing
Set OutlookApp = Nothing
Application.EnableEvents = True
Exit Sub
'Optimize Code
ExitSub:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End SubEdit modo : mis codes entre balises
Bonjour KIBI
Pour commencer, vous auriez dû lire la charte de ce forum comme il vous est demandé à votre inscription
[A LIRE AVANT DE POSTER] Charte du forum et informations utiles
Vous auriez pu/du voir ainsi que le code que vous donnez doit être mis entre balises avec le bouton "</>"
- Pour plus de lisibilité, utilisez le bouton pour insérer vos codes VBA et vos formules Excel.
Et également
4. Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
Bonne journée
Bonjour et bienvenue sur ce forum,
Pour l'utilisation de l'icone </> comme précisé par JExcel2fr, je vous ai corrigé le post pour que vous voyiez
Pour votre souci regardez ce lien qui peut vous aider --> https://forum.excel-pratique.com/s/goto/887492
Crdlt
Salut Modo Dan
Il aurait même fallut supprimer les lignes vides
salut JExcel2fr
Il aurait même fallut supprimer les lignes vides
Voilà !
Bonjour à tous,
je voudrais que le fichier excel s'enregistre aussi en pièce jointe en reprenant les Information contenu dans la cellule D4 & D7
Très bien, mai il y a quoi dans ces cellules , et on fait quoi avec ?
Pour ma part je pense que le destinataire ne doit pas avoir accès au code du classeur, si c'est juste pour avoir un visu sur une ou plusieurs feuilles, alors un PDF fera très bien l'affaire. Dites-nous si c'est bon pour vous.
Bonjour,
dans les cellules c’est juste la date du rapport et le numéro de l’entreprise pour les insérer dans l’objet du mails.
Un format pdf est envisageable et je suis d’accord avec vous c’est même mieux.
Re,
Quel est le nom de la feuille ou des feuilles à exporter ?
Combien de pages comprends la ou les feuilles dans la zone d'impression ?
Exemple ci-dessous la zone comprends 4 pages, mais seulement 3 sont utilisées.
Pour bien gérer l'export il vaut mieux définir la zone d'impression.
Voulez-Vous sauvegarder le fichier Pdf, ou bien juste le joindre au courriel ?
Re,
La zone d’impression est de 15 pages,
L’idée c’est juste de le mettre en pièce jointe (format.pdf) et le nom du fichier s’appelle TRAME investigation
Bonjour,
C'est le nom de la feuille que je voulais connaître, et pas le nom du fichier.
Bonjour,
j’ai mis le même nom ^^
Re,
Cela devrait ressembler à quelque chose comme cela :
Penser à :
- Dans la procédure EmailWorkbook définir la plage d'impression PRINT_AREA exemple "A1:D200"
- Dans la fonction ExportFile, vérifier le nom de la feuille pour itemSheet
- CC et BCC sont des chaines de caractères avec un point-virgule entre les adresses.
'@Description "Procédure principale d'envoie."
Sub EmailWorkbook(ByVal RecipientMail As Variant, _
Optional ByVal CarbonCopy As Variant, _
Optional ByVal BlindCarbonCopy As Variant, _
Optional Subject As String, _
Optional Display As Boolean = False)
If Subject = vbNullString Then Subject = "Investigation INC-XXX"
Const TEMPORARY_FORMAT As String = "_yyyymmddhhmmss"
Const PRINT_AREA As String = "A1:A150"
' // Create Instance of Outlook
On Error Resume Next
Dim OutlookApp As Object
Set OutlookApp = GetObject(class:="Outlook.Application") 'Handles if Outlook is already open
Err.Clear
If OutlookApp Is Nothing Then Set OutlookApp = CreateObject(class:="Outlook.Application") 'If not, open Outlook
If Err.Number = 429 Then
MsgBox "Outlook could not be found, aborting.", 16, "Outlook Not Found"
GoTo ExitSub
End If
On Error GoTo Catch
' // Create a new email message
Dim OutlookMessage As Object
Set OutlookMessage = OutlookApp.CreateItem(0)
' // Export file
Dim DefaultName As String
DefaultName = Split(ThisWorkbook.Name, ".")(0)
Dim TempFileName As Variant
TempFileName = ExportFile(DefaultName, PRINT_AREA)
If IsError(TempFileName) Then
DisplayError TempFileName
GoTo Catch
End If
' // Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
' // Save Changes
If Time() < #5:00:00 PM# Then
Dim Header As String
Header = "Bonjour,"
Else
Header = "Bonsoir,"
End If
Dim Body As String
Body = Header & vbNewLine & vbNewLine & "Ci-joint les documents concernant l'évènement du " & Range("D5").Text & " qui c'est déroulé à " & Range("D6").Text & _
" impliquant " & Range("D7").Text & " qui travaille à " & Range("D8").Text & " chez nous ." & "Pendant " & Range("D10").Text & " jours"
Body = Body & vbNewLine & vbNewLine & "Vous trouverez en pièce jointe l'extraction M au format PDF reprenant ses jours réels de la période de J-1 a J+1."
Body = Body & vbNewLine & vbNewLine & "Nous restons à votre disposition pour toutes informations complémentaire."
Body = Body & vbNewLine & vbNewLine & "Cordialement,"
' // Create Outlook email with attachment
With OutlookMessage
.to = RecipientMail
.CC = CarbonCopy
.BCC = BlindCarbonCopy
.Subject = Subject
.Body = Body
.Attachments.Add TempFileName
If Display Then
.Display
Else
.Send
End If
End With
'Close & Delete the temporary file
If TempFileName > vbNullString Then Kill TempFileName
Finally:
If Not OutlookMessage Is Nothing Then Set OutlookMessage = Nothing
If Not OutlookApp Is Nothing Then Set OutlookApp = Nothing
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
Catch:
If Err.Number > 0 Then
'TODO "Make something"
End If
Resume Finally
End Sub
'@Description "Procédure d'exportation renvoie le chemin complet du fichier. Sinon l'erreur rencontrée"
Public Function ExportFile(ByVal Value As String, _
PrintArea As String, _
Optional ByVal OpenAfterPublish As Boolean = False, _
Optional ByRef oSheet As Object) As Variant
On Error GoTo Catch
Dim itemSheet As Object
Set itemSheet = oSheet
If itemSheet Is Nothing Then Set itemSheet = ThisWorkbook.Worksheets("TRAME investigation")
If Not itemSheet Is Nothing Then
Const PATTERN As String = "_yyyymmddhhmmss"
ReDim SaveProperties(1) As Variant
SaveProperties(0) = Application.EnableEvents
SaveProperties(1) = Application.ScreenUpdating
Application.ScreenUpdating = False
Application.EnableEvents = False
' // Nom de fichier temporaire
Value = Value & Format(Now, PATTERN)
Dim FileName As String
FileName = Environ$("temp") & "\" & Value & ".pdf"
With itemSheet
ReDim Preserve SaveProperties(2)
SaveProperties(2) = .Visible
If .Visible <> xlSheetVisible Then .Visible = xlSheetVisible
.PageSetup.PrintArea = PrintArea
.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=FileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, _
IgnorePrintAreas:=False, From:=1, to:=15, OpenAfterPublish:=OpenAfterPublish
.Visible = SaveProperties(2)
End With
ExportFile = FileName
Else
ExportFile = CVErr(xlErrRef)
End If
Finally:
Application.EnableEvents = SaveProperties(0)
Application.ScreenUpdating = SaveProperties(1)
Exit Function
Catch:
If Err.Number = 1004 Then
ExportFile = CVErr(xlErrValue)
Else
ExportFile = CVErr(xlErrRef)
End If
Resume Finally
End Function
'@Description "Affiche les messages d'erreur."
Private Sub DisplayError(ErrorType As Variant)
Select Case CVErr(ErrorType)
Case xlErrRef
MsgBox "Oupss... Nous avons rencontré un problème d'exportation, la feuille TRAME investigation est introuvable." & vbNewLine & _
"Vous l'avez peut-être déplacée, renommée ou supprimée !" & vbNewLine & _
"" & vbNewLine & _
"La procédure va être suspendue."
Case xlErrValue
MsgBox "Oupss... Nous avons rencontré un problème d'exportation, vérifier que le chemin d'exportation est valide." & vbNewLine & _
"" & vbNewLine & _
"La procédure va être suspendue."
End Select
End SubPas pu le tester donc dites moi si vous rencontrez un problème.
Bonne programmation.
