Comment joindre plusieurs fichiers à un mail + mise en forme

Bonsoir la communauté

Nouveau problème VBA

Premier problème

J'ai créé un macro avec 2 pièces jointes mais maintenant je me rends compte que des fois je mets plus que 2 pièces jointes et j'aimerai savoir la ligne de code pour envoyer plusieurs pièces jointes en même temps. Une 20aine est possible

Deuxieme probleme

J'ai crée des listes déroulantes avec les textes de mes mails a envoyer et j'ai ma mise en page qui ne correspond plus quand elle est mise dans outlook

comment garder la mise en forme

merci pour vos reponses

Bonjour,

Pour le premier problème, une boucle est nécessaire. Pour le second, il faut utiliser l'éditeur Word pour conserver le format.

ci-dessous exemple de code :

Sub Envoi_Mail()
    '.....................................................................

    '// Définition des variables
    Dim OL As Object, myItem As Object, wDoc As Object, corps As Object
    Dim plage_à_copier As Range
    Dim pièces_jointes()
    Dim i As Integer

    '// définition de la plage de texte à copier
     Set plage_à_copier = Range("E4")

    '// définition des pièces à joindre
    i = 0
    pièces_jointes = Array("")
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        If .Show = -1 Then
            For i = 1 To .SelectedItems.Count
                ReDim Preserve pièces_jointes(i)
                pièces_jointes(i) = .SelectedItems(i)
            Next i
        End If
    End With

    '// assignation application Outlook
    Set OL = CreateObject("Outlook.Application")
    If OL.Explorers.Count = 0 Then
        OL.Session.GetDefaultFolder(olFolderInbox).Display
        OL.ActiveExplorer.WindowState = olMinimized
    End If

    '// Assignation des objets
    Set myItem = OL.CreateItem(olMailItem)
    myItem.BodyFormat = 3    'utilisation de l'éditeur Word

    '// Création Email et envoi
    With myItem

        ' Destinataire(s) du mail
        .To = "destinataire@xxx.yyy"
        ' Sujet de l'eMail
        .Subject = "Objet du mail "
        ' Joindre les fichiers
        For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i

        'Affichage pour signature et éditeur Word
        .Display

        ' Début du mail
        Set wDoc = .GetInspector.WordEditor  'lancement éditeur Word
        Set corps = wDoc.Content
        corps.InsertParagraphBefore
        corps.Move 4, -1
        corps.InsertAfter vbNewLine & "Bonjour," & vbNewLine & vbNewLine
        corps.InsertAfter vbNewLine & "Ceci est un exemple" & vbNewLine & vbNewLine

        ' Police suite du mail
        With corps.Font
            '........
        End With

        ' Fin du mail avec copie de la plage
        corps.InsertParagraphAfter
        corps.Move 4, 1
        plage_à_copier.Copy
        corps.Paste
        corps.Move 4

        ' Envoi
        .Send

    End With

    '// désassignation des objets
    Set myItem = Nothing
    Set wDoc = Nothing
    Set OL = Nothing

End Sub

bonjour

merci de votre réponse je vais traiter une question a la fois

quand je mets ca

ca me met redim incorrect

Const olMailItem As Integer = 0

  Dim MaMessagerie As Object

 '// définition des pièces à joindre
    i = 0
    pièces_jointes = Array("")
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        If .Show = -1 Then
            For i = 1 To .SelectedItems.Count
                ReDim Preserve pièces_jointes(i)
                pièces_jointes(i) = .SelectedItems(i)
            Next i
        End If
    End With

  Set MaMessagerie = CreateObject("Outlook.Application") 'création d'un objet Outlook
  With MaMessagerie.CreateItem(olMailItem)
    .Display
    .To = Range("A4")
    .CC = Range("B4")
    .BCC = Range("C4")
    .For i = 1 ToUBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i
    .Subject = Range("D4")
    .HTMLBody = Range("E4").Value & .HTMLBody
    .Display
  End With

End Sub

Vous devez procéder à la déclaration des variables

    '// Définition des variables
    Dim OL As Object, myItem As Object, wDoc As Object, corps As Object
    Dim plage_à_copier As Range
    Dim pièces_jointes()
    Dim i As Integer

et ceci va provoquer une erreur

    .For i = 1 ToUBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i

à rectifier comme ceci

    For i = 1 ToUBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
    Next i

Effectivement si j'oublie de déclarer les variables cela ne va pas fonctionner 😉

Merci en tout cas

pour l'autre question

je ne peux garder ma liste déroulante il faut que je copie tous mes textes par word?

ou c'est de faire appel a word?

c'est cette partie que je ne comprends pas

je ne peux garder ma liste déroulante il faut que je copie tous mes textes par word?

Vous pouvez parfaitement garder votre liste déroulante, le résultat en est stocké dans la cellule E4. Il vous suffit donc de copier cette cellule dans l'éditeur Word qui en conservera le format et la valeur. Ce n'est pas le format HTML

.HTMLBody = Range("E4").Value & .HTMLBody

qui le permettra

Pour le code que vous avez envoyé la piece jointe s'integre en fin de mail je voudrais si c'est possible qu'elle s'integre dans les pieces jointes sous le sujet du mail

et ensuite comment tout de suite intégrer ma plage copiée sans le bonjour

je gratte mais je ne trouve pas

merci de vos reponses

L'éditeur Word n'a rien à voir avec Excel car il est lancé dans l'instance Outlook avec ces instructions :

    '// Assignation des objets
    Set myItem = OL.CreateItem(olMailItem)
    myItem.BodyFormat = 3    'utilisation de l'éditeur Word
    Set wDoc = myItem.GetInspector.WordEditor 'lancement éditeur Word

via le changement du format du mail Outlook en "texte enrichi" = 3 au lieu de "HTML" = 2

Nouvelle ecriture maintenant il me demande un objet requis au niveau des pieces jointes je pense

Private Sub CommandButton1_Click()
    Dim MaMessagerie As Object
    Dim pièces_jointes()
    Dim i As Integer
    Dim myItem As Object

Const olMailItem As Integer = 0

 '// définition des pièces à joindre
    i = 0
    pièces_jointes = Array("")
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        If .Show = -1 Then
            For i = 1 To .SelectedItems.Count
                ReDim Preserve pièces_jointes(i)
                pièces_jointes(i) = .SelectedItems(i)
            Next i
        End If
    End With

     '// Assignation des objets
    Set myItem = OL.CreateItem(olMailItem)
    myItem.BodyFormat = 3    'utilisation de l'éditeur Word
    Set wDoc = myItem.GetInspector.WordEditor  'lancement éditeur Word

  Set MaMessagerie = CreateObject("Outlook.Application") 'création d'un objet Outlook
  With MaMessagerie.CreateItem(olMailItem)
    .Display
    .To = Range("A4")
    .CC = Range("B4")
    .BCC = Range("C4")
    For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i
    .Subject = Range("D4")
    .HTMLBody = Range("E4").Value & .HTMLBody
    .Display
  End With

End Sub

probleme toujours beug dans la matrice lol

Private Sub CommandButton1_Click()
    Dim OL As Object, myItem As Object, wDoc As Object, corps As Object
    Dim pièces_jointes()
    Dim i As Integer
    Dim plage_à_copier As Range

Const olMailItem As Integer = 0

 With Me
        Set plage_à_copier = Range("E4")
    End With

 '// définition des pièces à joindre
    i = 0
    pièces_jointes = Array("")
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        If .Show = -1 Then
            For i = 1 To .SelectedItems.Count
                ReDim Preserve pièces_jointes(i)
                pièces_jointes(i) = .SelectedItems(i)
            Next i
        End If
    End With

    Set OL = CreateObject("Outlook.Application")
    If OL.Explorers.Count = 0 Then
        OL.Session.GetDefaultFolder(olFolderInbox).Display
        OL.ActiveExplorer.WindowState = olMinimized
    End If

    '// Assignation des objets
    Set myItem = OL.CreateItem(olMailItem)
    myItem.BodyFormat = 3    'utilisation de l'éditeur Word
    Set wDoc = myItem.GetInspector.WordEditor  'lancement éditeur Word

    '// Création Email et envoi
    With myItem

    .Display
    .To = Range("A4")
    .CC = Range("B4")
    .BCC = Range("C4")
    For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i
    .Subject = Range("D4")
    .HTMLBody = wDoc.Content
    corps.InsertParagraphAfter
        corps.Move 4, 1
        plage_à_copier.Copy
        corps.Paste
        corps.Move 4 & .HTMLBody
    .Display
  End With

End Sub
set corps = wDoc.Content

et non

.HTMLBody = wDoc.Content

Bonsoir,

Ce code devrait fonctionner

Private Sub CommandButton1_Click()
    Dim OL As Object, myItem As Object, wDoc As Object, corps As Object
    Dim pièces_jointes()
    Dim i As Integer
    Dim plage_à_copier As Range

    Const olMailItem As Integer = 0

    '// définition plage de texte à copier
    Set plage_à_copier = Range("E4")

    '// définition des pièces à joindre
    i = 0
    pièces_jointes = Array("")
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        If .Show = -1 Then
            For i = 1 To .SelectedItems.Count
                ReDim Preserve pièces_jointes(i)
                pièces_jointes(i) = .SelectedItems(i)
            Next i
        End If
    End With

    '// assignation application Outlook
    Set OL = CreateObject("Outlook.Application")
    If OL.Explorers.Count = 0 Then
        OL.Session.GetDefaultFolder(olFolderInbox).Display
        OL.ActiveExplorer.WindowState = olMinimized
    End If

    '// Assignation des objets
    Set myItem = OL.CreateItem(olMailItem)
    myItem.BodyFormat = 3    'utilisation de l'éditeur Word

    '// Création Email et envoi
    With myItem

        .To = Range("A4")
        .CC = Range("B4")
        .BCC = Range("C4")
        For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i)
        Next i
        .Subject = Range("D4")

        .Display    'affichage pour signature et éditeur Word

        Set wDoc = .GetInspector.WordEditor  'lancement éditeur Word
        Set corps = wDoc.Content
        corps.InsertParagraphBefore
        corps.Move 4, -1
        plage_à_copier.Copy
        corps.Paste
        corps.Move 4

        .Send   'envoi

  End With

End Sub

Merci beaucoup ce code marche super juste quand j'insère une pièce jointe elle se met a la fin de mon mail

alors que j'aimerai qu'elle puisse s'intégrer au bandeau en dessous du sujet du mail

merci de vos réponses

quand j'insère une pièce jointe elle se met a la fin de mon mail

alors que j'aimerai qu'elle puisse s'intégrer au bandeau en dessous du sujet du mail

apporter la modification ci-dessous :

    '// Création Email et envoi
    With myItem

        .To = Range("A4")
        .CC = Range("B4")
        .BCC = Range("C4")
        .Subject = Range("D4")

        .Display    'affichage pour signature et éditeur Word

        Set wDoc = .GetInspector.WordEditor  'lancement éditeur Word
        Set corps = wDoc.Content
        corps.InsertParagraphBefore
        corps.Move 4, -1
        plage_à_copier.Copy
        corps.Paste
        corps.Move 4

        For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i),1,1
        Next i

       .Send   'envoi

  End With

je me suis peut etre mal exprime

voici comment je voudrais que ma piece jointe apparaisse

je vous fais travailler

capture d ecran 2023 03 25 180445

Avec la modification du code, les pièces jointes apparaissent bien en tête, juste en dessous de l'objet du mail. Je ne vois pas ce que vous voulez de plus.

Je voudrais qu'elles apparaissent comme sur l'image

qu elles puissent être en tête de mail

entre le sujet du mail et le corps du mail

capture d ecran 2023 03 25 205257

voici la capture d ecran avec le code que vous m'avez fourni

capture d ecran 2023 03 25 180445

comment je voudrais qu elle soit

cela vient t il de l'editeur word ?

Essayer cette modif :

        
        ' Joindre les fichiers
        For i = 1 To UBound(pièces_jointes)
            .Attachments.Add pièces_jointes(i), , 1, "pièce"
        Next i

Bonjour,

avec votre modification cela ne prends toujours pas

Rechercher des sujets similaires à "comment joindre fichiers mail mise forme"