[RESOLU] VBA : Copier un tableau d'Excel et le coller dans un email Outlook

seb_sams

XLDnaute Nouveau
Bonjour tout le monde,

Je suis bloqué sur quelque chose depuis plusieurs jours et je fais donc appel aux spécialistes d'Excel et du VBA. :)
Je vous laisse découvrir le problème ci-dessous :

A l'ouverture de mon fichier Excel, j'ai une macro qui :
- récupère des informations d'un autre classeur
- affiche les infos dans un tableau (sur la Feuil1)
- affiche d'autres infos dans un TCD (sur la Feuil2)

Tout ça fonctionne très bien et je voudrais maintenant pouvoir faire un copier-coller de ces tableaux dans Outlook pour les envoyer par email.

Je n'ai pas de problème pour créer l'email et écrire du texte.
Mon problème est de copier-coller les tableaux dans le corps de l'email. Et je souhaite avoir un résultat visuel qui soit le même que si je copie-colle mes tableaux manuellement.

En pièce jointe, vous trouverez un exemple de mon fichier avec ma macro pour l'envoi d'email et les 2 tableaux que je souhaite copier-coller.

J'espère que mon problème vous inspirera car j'ai déjà pas mal recherché sur internet mais je n'ai pas trouvé la solution que je souhaite (je ne veux pas juste copier les valeurs, je veux garder la mise en forme de la même manière qu'un copier-coller manuel).

Merci d'avance à celles et ceux qui se pencheront sur mon problème,

Cordialement,
Seb
 

Pièces jointes

  • envoi_email_avec_tableau.xlsm
    25.8 KB · Affichages: 474
Dernière édition:

seb_sams

XLDnaute Nouveau
Re : VBA : Copier un tableau d'Excel et le coller dans un email Outlook

Merci Bruno,

Désolé pour ma réponse tardive, la semaine a été chargée.

J'avais déjà trouvé la même chose que tu m'as proposé mais je n'étais pas tout à fait parvenu à faire ce que je voulais.
Mais après avoir réessayé et retravaillé le truc, j'ai réussi à obtenir quelque chose qui me convient.

Merci.
 

Jeff7087

XLDnaute Nouveau
Re : [RESOLU] VBA : Copier un tableau d'Excel et le coller dans un email Outlook

Bonjour
Je vois que la discussion est cloturée, mais je ne vois pas la solution. Et comme j'ai exactement le même problème, j'aimearis bien la connaitre.
Merci
 

Jeff7087

XLDnaute Nouveau
Re : [RESOLU] VBA : Copier un tableau d'Excel et le coller dans un email Outlook

Bonjour BrunoM45
J'ai bien trouvé et regardé les liens fournis (plus d'autres), mais les solutions proposées ne me satisfont pas, car soit on transforme en HTML et dans ce cas je perds toute la mise en forme, soit on transfert la feuille complète (utilisation de MailEnvelope) et là le mail devient beaucoup trop lourd, car la finalité est de lire sur un PDA la zone de cellules sélectionnées (tableau de 10col x 15 lignes), soit .................j'ai raté un épisode ..........auquel cas je m'en excuse.

J'ai également essayé d'utiliser SENDKEYS pour simuler un "Coller", mais sans succès (peut être des pb de syntaxes dans mes commandes ?), car quand je STOP ma macro au moment du collage, et que je le fais à la main, je récupère bien mes datas du presse papier ...........
Il doit bien y avoir une solution ..........
Merci
 

seb_sams

XLDnaute Nouveau
Re : [RESOLU] VBA : Copier un tableau d'Excel et le coller dans un email Outlook

Bonsoir Jeff7087,

Qu'est ce que tu entends par perdre la mise en forme ?

Tu utilises plusieurs styles de police dans la zone à copier ? Car sinon, il est toujours possible de choisir la police quand tu récupères ton HTML. Pour les couleurs de police, je ne sais pas si c'est gardé mais le background est conservé.

Tu peux aller voir un autre de mes posts :

https://www.excel-downloads.com/thr...en-html-aligne-a-gauche-et-non-centre.192915/

Si tu as des questions...

Bon courage,
Seb
 
Dernière édition:

fastingsenna

XLDnaute Nouveau
Bonjour,

Je remet la discussion à jour quand car j'ai été confronté au même problème. Si vous souhaitez écrire du texte en plus de votre tableau que vous insérer dans le mail (au format HTML), il suffit d'écrire au format HTML si vous souhaitez introduire du texte. Je vous joint un exemple en commentaires. Tout d'abord définissez la plage de votre tableau (attention si elle est dynamique). Ensuite utiliser la fonction "converthtml" pour convertir la plage de cellule en HTML. Pour finir, élaborer votre texte grâce au langage HTML (très facile de trouver la signifcation des balises sur l'internet). L'astuce est le saut de ligne avec "<p>.......</p>et SURTOUT afin de conserver votre tableau, il faut incrémenter la ligne "MonMessage.HTMLBody" à chaque fois que vous voulez introduire une nouvelle de caractère.

Voilà, je crois que tout est dit, n'hésitez pas à me poser des questions.

Très bonne journée !

PS : Si quelqu'un arrive à répondre à cela, il serait le boss des boss : https://excel-downloads.com/threads/compteur-nombre-de-jour-de-depassement.20075923/#post-20581210
VB:
Sub envoyer_mail()

    Dim MaMessagerie As Object
    Dim MonMessage As Object
    Set MaMessagerie = CreateObject("Outlook.Application")
    Set MonMessage = MaMessagerie.CreateItem(0)
   
    Dim DateVL As String
    DateVL = Range("tb_mail_gestion[Date VL]").Rows(3)
   
    Dim Corps As Variant
    lastc = Sheets("Mail").Range("A2").End(xlToRight).Column
    lastr = Sheets("Mail").Range("A2").End(xlDown).Row
    Corps = converthtml(Range(Sheets("Mail").Cells(2, 1), Sheets("Mail").Cells(lastr + 1, lastc)))
   
    Dim strHTML1, strHTML2, strHTML3, strHTML4 As String
    strHTML1 = "<html><body><h1>Bonjour,</h1><p>Merci de bien vouloir trouver ci-dessous le suivi des dépassements OPC sur la VL du 28/04/2023. Merci de nous indiquer les actions de régularisation déjà réalisées et/ou à venir.</p></body></html>"
    strHTML2 = "<html><body><i><u><strong><p>1) Nouveaux dépassements :</i></u></strong></p></body></html>"
    strHTML3 = "<html><body><i><u><strong><p>2) Dépassement en cours :</i></u></p><strong></body></html>"
    strHTML4 = "<html><body><i><u><strong><p>3) Régularisation :</i></u></p><strong></body></html>"
    strHTML5 = "<html><body><p>Cordialement,</p></body></html>"
   
    Dim Email As String
    Email = "AM_GestionOPC"
    Dim Email_CC As String
    Email_CC = "AM_controledesrisques;" & _
                    "AM_rcci;"
                   
    MonMessage.To = Email
    MonMessage.CC = Email_CC
   
    MonMessage.Subject = "Alerte dépassements ratios sur les fonds - " & DateVL & ""
   
    MonMessage.HTMLBody = strHTML1
    MonMessage.HTMLBody = MonMessage.HTMLBody & Corps
    MonMessage.HTMLBody = MonMessage.HTMLBody & strHTML2
    MonMessage.HTMLBody = MonMessage.HTMLBody & strHTML3
    MonMessage.HTMLBody = MonMessage.HTMLBody & strHTML4
    MonMessage.HTMLBody = MonMessage.HTMLBody & strHTML5
   
    MonMessage.Display
   
    Set MaMessagerie = Nothing
   
End Sub

Function converthtml(plage As Object)
    Dim lmf, fso, ts, r
    lmf = "abctext.html"
    With ActiveWorkbook.PublishObjects.Add(xlSourceRange, lmf, plage.Parent.Name, plage.Address, xlHtmlStatic, "Book1_26691", "")
        .Publish (True)
        .AutoRepublish = False
    End With
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(lmf)
    r = ts.ReadAll
    ts.Close
    converthtml = r
   
End Function
 

Discussions similaires

Réponses
6
Affichages
362

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG