Envoi feuille active par mail en donnant un nom à la pièce jointe

Cire37

XLDnaute Nouveau
Bonsoir,

Je cherche à envoyer par mail la feuille active d'un classeur en donnant un nom à la pièce jointe générée.

Merci d'avance pour votre aide
 

job75

XLDnaute Barbatruc
Re : Envoi feuille active par mail en donnant un nom à la pièce jointe

Bonjour Cire37,

Cette macro envoie par mail la feuille active du classeur actif :

Code:
Sub EnvoiMail()
Dim nom As String, adresse As String
'données à adapter
nom = "Mon beau fichier"
adresse = "aaaa@bbbb.fr"
'copie la feuille active dans un nouveau document
ActiveSheet.Copy
'renomme la feuille créée
ActiveSheet.Name = nom
'création du fichier .xls dans le répertoire en cours
ActiveWorkbook.SaveAs nom, xlNormal
'facultatif, évite le message (sur Outlook Express)
SendKeys "~"
'envoi mail
ActiveWorkbook.SendMail adresse
'ferme le fichier
ActiveWorkbook.Close
'facultatif, supprime le fichier créé
Kill nom & ".xls"
End Sub
L'envoi de la touche <Entrée> évite le message sur Outlook Express.

A+
 

Cire37

XLDnaute Nouveau
Re : Envoi feuille active par mail en donnant un nom à la pièce jointe

Bonsoir le forum,

Besoin d'aide ... Je n'arrive pas à envoyer en pièce jointe la feuille active en lui donnant un nom. L'envoi se fait avec Outlook.

Merci d'avance pour votre aide
 

david84

XLDnaute Barbatruc
Re : Envoi feuille active par mail en donnant un nom à la pièce jointe

Bonsoir, salut Gérard,
ci-joint une macro adaptée de Ron De Bruin
.
Ne pas oublier :
- de cocher la référence Microsoft Outlook xx.0 object library dans l'éditeur VBE (outil>références)
- de préciser le destinataire.
Code:
Option Explicit
Sub EnvoiMailFeuilleActive()
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set Sourcewb = ActiveWorkbook

    'Copy the sheet to a new workbook
    ActiveSheet.Copy
    Set Destwb = ActiveWorkbook

    'Determine the Excel version and file extension/format
    With Destwb
        If Val(Application.Version) < 12 Then
            'You use Excel 97-2003
            FileExtStr = ".xls": FileFormatNum = -4143
        Else
            'You use Excel 2007-2010, we exit the sub when your answer is
            'NO in the security dialog that you only see  when you copy
            'an sheet from a xlsm file with macro's disabled.
            If Sourcewb.Name = .Name Then
                With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                End With
                MsgBox "Your answer is NO in the security dialog"
                Exit Sub
            Else
                Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select
            End If
        End If
    End With

    '    'Change all cells in the worksheet to values if you want
    '    With Destwb.Sheets(1).UsedRange
    '        .Cells.Copy
    '        .Cells.PasteSpecial xlPasteValues
    '        .Cells(1).Select
    '    End With
    '    Application.CutCopyMode = False

    'Save the new workbook/Mail it/Delete it
    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Part of " & Sourcewb.Name & " " _
                 & Format(Now, "dd-mmm-yy h-mm-ss")

    With Destwb
        .SaveAs TempFilePath & TempFileName & FileExtStr, _
                FileFormat:=FileFormatNum
        .Close SaveChanges:=False
    End With

Dim OLApplication As Outlook.Application, OLMail As Outlook.MailItem
Set OLApplication = CreateObject("Outlook.Application")
Set OLMail = OLApplication.CreateItem(OLMailItem)
With OLMail
   .To = "toto@wanadoo.fr" ' Destinataire à préciser
   '.CC = MailCC ' Copie
   '.BCC = CopieCarboneInvisible
   .Importance = olImportanceNormal
   .Subject = "Votre fichier" ' Sujet
   .Body = "cf.fichier" ' Message
   .Attachments.Add (TempFilePath & TempFileName & FileExtStr) ' Pièce jointe
   .Categories = "Daily"
   .OriginatorDeliveryReportRequested = True ' Accusé de dépôt
   .ReadReceiptRequested = True ' Accusé de lecture
   .Send '<<<<<<<<<<<<<<<Pour envoyer directement
   '.Display '<<<<<<<<<<<<<Pour voir le mail avant envoi
End With

    'Delete the file you have send
    Kill TempFilePath & TempFileName & FileExtStr

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

Set OLApplication = Nothing
Set OLMail = Nothing
End Sub
A+
 

Discussions similaires

Réponses
3
Affichages
146
Réponses
1
Affichages
155
Compte Supprimé 979
C
Réponses
2
Affichages
121
Réponses
2
Affichages
303

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix