IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Problème pour garder la mise en forme d'un document à envoyer par mail depuis excel


Sujet :

VBA

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Points : 26
    Points
    26
    Par défaut Problème pour garder la mise en forme d'un document à envoyer par mail depuis excel
    bonjour à tous,

    A l'aide de la FaQ Developpez et l'aide de Microsoft j'ai réussi à coder une macro excel qui me permet d'envoyer un mail à des listes d'utilisateurs.
    La génération du mail et son envoi marche très bien mais le corps du mail n'est pas ce que je souhaite.
    Pour le corps du mail je dois sélectionner un document word et copier son contenu.
    Mais ce que j’envoie par mail est du text brut. J'ai perdu la mise en page, les tableaux les couleurs etc...
    Il y a surement quelque chose que je rate mais je ne trouve pas quoi. Les exemples que je trouve envoient le word en pj mais ce n'est pas ce que je souhaite faire.

    Des pistes pour que je me corrige ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub SendOutlookMessages()
     
        Dim OL As Object, MailSendItem As Object
        Dim W As Object
        Dim MsgTxt As String, SendFile As String
        Dim MsgTotal As Variant
        '******************************
        '***********WORD***************
        '******************************
        'Selection du document word à envoyer
        SendFile = Application.GetOpenFilename(Title:="Select MS Word " & _
            "file to mail, then click 'Open'", buttontext:="Send", _
            MultiSelect:=False)
     
        'Ouverture du document word
        Set W = GetObject(SendFile)
     
        'Recupération du contenu du document
        MsgTotal = W.Range(Start:=W.Paragraphs(1).Range.Start, _
           End:=W.Paragraphs(W.Paragraphs.Count).Range.End)
     
        'Arret de la session word
        Set W = Nothing
        '******************************
        '***********FIN WORD***********
        '******************************
     
        '******************************
        '***********OUTLOOK************
        '******************************
        'Creation d'un mail Outlook
        Set OL = CreateObject("Outlook.Application")
        Set MailSendItem = OL.CreateItem(olMailItem)
     
     
        'Récupération de mes listes de mails dans le classeur excel
        Dim ArrayListeDesMails As Variant
        Sheets("Liste Appli").Activate
        ArrayListeDesMails = ActiveSheet.ListObjects("TableauListeDesMails").DataBodyRange
     
        'Pour chaque liste de mails
        For Each liste In ArrayListeDesMails
            'Creation du message et envoi
            With MailSendItem
                .Subject = SendFile
                .HTMLBody = MsgTotal
                '.Body = MsgTotal
                .To = liste
                .Sender = "moi@moi.fr"
                .Send
            End With
     
        Next
     
        Set OL = Nothing
        '******************************
        '***********FIN OUTLOOK********
        '******************************
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Bonjour,

    si tu es ouvert à l'idée de regarder comment on s'y prend pour envoyer le contenu d'une plage de cellules Excel, tu peux regarder dans la
    https://excel.developpez.com/faq/?pa...geCellulesMail

    en particulier la partie du code contenu dans
    aux ajustements près, ca fait très bien son boulot
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Points : 26
    Points
    26
    Par défaut
    Merci pour ton aide,
    Malheureusement cette solution à un problème majeur qui est que en entrée on me fourni un docx avec des puces, des images, de la mise en forme bien lourde et ce n'est pas possible de transformer ça en plage de cellule.

    j'ai trouvé une solution qui permet de faire un copier/coller du word dans le mail : .GetInspector.WordEditor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MsgTotal = WordApp.Range(Start:=WordApp.Paragraphs(1).Range.Start, _
           End:=WordApp.Paragraphs(WordApp.Paragraphs.Count).Range.End).Copy
    Set OutMailEditor = OutMail.GetInspector.WordEditor
    With OutMail
                '.Body = MsgTotal
                OutMailEditor.Range.Paste
                .SendUsingAccount = myAccount
                .Display
                .Send
    Obligé de faire un Display avant de faire un Send sinon le corps du message est vide. Ca fait flasher l'écran le temps de l'envoi des mails mais l'utilisateur s'en accommodera

    Par compte je me frotte à un autre problème.
    Impossible de changer le .SendUsingAccount qui reste toujours à "nothing"

    edit : en fait je ne regardais pas au même endroit c'est .SentOnBehalfOfName que je devais changer

Discussions similaires

  1. [XL-2003] Macro excel pour copier la mise en forme d'un document à plusieurs autres documents.
    Par antoinepoirier dans le forum Macros et VBA Excel
    Réponses: 43
    Dernier message: 21/07/2015, 18h17
  2. [TinyMCE] Problème pour récupérer la mise en forme de TinyMCE
    Par mag2611 dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 28/10/2013, 15h01
  3. Un type Java pour garder la mise en forme
    Par CompteHamza dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 24/08/2012, 09h17
  4. Type pour garder la mise en forme
    Par CompteHamza dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/08/2012, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo