Code VBA pour coller un tableau excel dans corps de mail Outlook

Code VBA pour coller un tableau excel dans corps de mail Outlook - VB/VBA/VBS - Programmation

Marsh Posté le 15-05-2013 à 16:28:00    

Bonjour à tous et à toutes,
 
Je suis actuellement en train de travailler sur une macro qui génère un email à une liste définie de personne.
Ma macro trouve les destinataires (feuille 2 dans fichier 1), ajoute le sujet du mail, le texte pour le corps du mail.
Le soucis qui se pose à moi et qui m'a valu la lecture de tous les topics possibles et inimaginables durant 3 jours est le suivant : j'aimerais coller le tableau de mon fichier 2 dans le corps même de mon email.
 
J'ai réussi à créer le code qui me permet de mettre ce tableau en pièce jointe, mais j'aimerais savoir s'il est possible de le mettre dans le corps du mail, après mon texte.
 
Merci pour votre aide  :) !

Reply

Marsh Posté le 15-05-2013 à 16:28:00   

Reply

Marsh Posté le 16-05-2013 à 08:02:05    

As tu regardé si les fonctions .Copy et .Paste fonctionnent ? Sinon, il faudra probablement passer par de l'écriture html dans le code vba, du genre :


Dim msgCorps as string
msgCorps="<table>" 'Ouverture d'un tableau en html"
msgCorps=msgCorps & "<tr><td>" & cells(i,j).value & "</td><td>"  & cells(i,j+1).value & "</td></tr>"
msgCorps=msgCorps & "<tr><td>" & cells(i+1,j).value & "</td><td>"  & cells(i+1,j+1).value & "</td></tr>"
msgCorps=msgCorps & "</table>
'etc
'puis ensuite envoyer le corps du message avec :
objMessageOutlook.bodyHtml=msgCorps


C'est juste pour te donner une piste, je viens d'écrire ces lignes juste là, de tête. La méthode est bonne, probablement pas la syntaxe !
J'ai déjà utilisé cette méthode pour envoyer des messages via outlook formatés en HTML. Ça fonctionne bien, mais c'est très chiant à écrire !

 

Edit : un lien vers la syntaxe des tableaux en HTML : http://www.guide-code-html.com/les-tables-html.php


Message édité par otobox le 16-05-2013 à 08:03:31

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 16-05-2013 à 09:33:50    

Bonjour Otobox!
 
Merci pour cette réponse rapide!
J'ai effectivement déjà essayé les fonctions .copy et .paste, mais cela ne fonctionen pas.
 
Je vais me pencher sur le lien que tu m'as envoyé et essayer d'y voir clair :)

Reply

Marsh Posté le 16-05-2013 à 10:02:32    

Est-ce que ce code crée un nouveau tableau pour ensuite insérer mes données dedans?
Ou faut-il reprendre les caractéristiques de mon tableau excel existant?
 
Je suis désolée, je suis vraiment débutante en vba!

Reply

Marsh Posté le 16-05-2013 à 10:55:49    


           Bonjour.
 
           Apparemment le plus simple serait de passer par CDO
 
           Bon courage !
 
         

Reply

Marsh Posté le 16-05-2013 à 11:01:51    

Merci Marc, je pense effectivement revenir vers CDO car via outlook je galère vraiment à insérer ce tableau dans le corps du mail.

Reply

Marsh Posté le 16-05-2013 à 11:24:34    

Regarde ici :
http://msdn.microsoft.com/en-us/li [...] e.11).aspx
 
ça a marché pour moi.

Reply

Marsh Posté le 16-05-2013 à 11:38:55    

 
           Takama13, val_ou souhaite coller son tableau dans le corps même d'un mail, pas en pièce jointe …
 
           A noter le même auteur dans nos liens, une référence !
           CDO permet aussi de s'affranchir des blocages de sécurité depuis la version 2007 d'Outlook …


Message édité par Marc L le 16-05-2013 à 11:45:41
Reply

Marsh Posté le 16-05-2013 à 12:11:48    

je sais, regarde la "part two"

Reply

Marsh Posté le 16-05-2013 à 13:34:34    

 
           Oui, effectivement …   Franchement, t'aurais pu (dû !) la mettre directement en lien !
 
           En tout cas lien à conserver …
 

Reply

Marsh Posté le 16-05-2013 à 13:34:34   

Reply

Marsh Posté le 16-05-2013 à 13:49:44    

J'ai modifié et utilisé le code du sujet "Mailing a Range or Selection in the Body of an E-Mail Message" http://msdn.microsoft.com/fr-fr/li [...] ectionBody
 
Mais la macro me dit que la fonction .HTMLBody = RangetoHTML(rng) n'est pas définie.
 
Est-ce que vous avez une idée?
J'ai l'impression que je ne m'en sortirai jamais. . .
 
V.
 

Reply

Marsh Posté le 16-05-2013 à 13:59:53    

"You need to use this module with the RangetoHTML subroutine."
 
Où le trouver?
Faut-il le cocher dans les compléments?

Reply

Marsh Posté le 16-05-2013 à 14:09:29    

Marc L a écrit :

 
           Oui, effectivement …   Franchement, t'aurais pu (dû !) la mettre directement en lien !
 
           En tout cas lien à conserver …
 


 
Je sais, mais je pensais que c'était utile de voir toutes les possibilités
 

val_ou a écrit :

"You need to use this module with the RangetoHTML subroutine."
 
Où le trouver?
Faut-il le cocher dans les compléments?


 
C'est sur la même page :
Creating HTML for a Worksheet, Range, or Selection
The function RangetoHTML is called in the following sections in this column:

Reply

Marsh Posté le 16-05-2013 à 15:25:43    

Merci beaucoup Takama13 pour ton aide.
Le tableau est enfin inséré dans le corps de mon mail!
Malheureusement, lorsque j'ajoute un .body = "corps de texte", mon tableau est supprimé.
 
N'est-il pas possible de mettre mon tableau + du texte?

Reply

Marsh Posté le 16-05-2013 à 15:29:42    

Je pense être parvenue à mes fins!
Merci pour ce lien, c'est une vraie mine d'or!
http://msdn.microsoft.com/en-us/li [...] ectionBody


Message édité par val_ou le 16-05-2013 à 15:58:28
Reply

Marsh Posté le 16-05-2013 à 15:51:40    

Pour ajouter du texte, je ne sais pas.
à cette ligne :
.HTMLBody = RangetoHTML(rng) & Signature
 
Essaie :
.HTMLBody = RangetoHTML(rng) & Signature & "Ton texte"

Reply

Marsh Posté le 16-05-2013 à 15:53:21    

Tu penses que ma signature se mettra automatiquement en mettant & Signature?
 
Pour ajouter du texte, on peux faire .HTMLBody = "texte" & RangeToHTML(rng)
 
Ou bien ajouter la fonction  
Dim StrBody As String
' Build the string that you want to add.
StrBody = "This is line 1" & "<br>" & _
          "This is line 2" & "<br>" & _
          "This is line 3" & "<br><br><br>"

Reply

Marsh Posté le 16-05-2013 à 16:30:11    

Pour ta signature, ajoute dans ton code, juste avant "With OutMail" :
 

Code :
  1. SigString = Environ("appdata" ) & "\Microsoft\Signatures\Nom de ta signature dans outlook.htm"
  2.     If Dir(SigString) <> "" Then
  3.         Signature = GetBoiler(SigString)
  4.     Else
  5.         Signature = ""
  6.     End If


 
Pour le texte, tu veux ajouter quoi ?

Reply

Marsh Posté le 16-05-2013 à 16:32:38    

En fait mon texte utilise également des variables.
Quand je n'avais pas mon tableau et que je mettais mon texte style :
"dear all,
 
please find the resultats for the period Tblo(1) & "-" & Right(Year(Date), 2), cela fonctionnait.
Mais ... en intégrant ces variables dans le StrBody, ça ne fonctionne pas

Reply

Marsh Posté le 16-05-2013 à 16:55:43    

A la ligne :
.HTMLBody = RangetoHTML(rng) & ...
 
Tu peux ajouter des variables (comme la signature dans mon exemple plus haut), et même du texte en utilisant du code HTML.
 
Mais je ne connais pas l'HTML pour t'aider.
 

Reply

Marsh Posté le 16-05-2013 à 17:02:23    

Le problème c'est que si j'utilise .HTMLBody = RangetoHTML(rgn) & du texte, il me collera tout mon texte à la suite. Sans faire de retour à la ligne.
 
En ce qui concerne la signature, j'ai un message d'erreur sur "GetBoiler" (ligne 4 dans ton code) : erreur de compilation, Sub ou Funtion non définie

Reply

Marsh Posté le 16-05-2013 à 17:14:33    

oops, désolé, voici la fonction :

Code :
  1. Function GetBoiler(ByVal sFile As String) As String
  2.     Dim fso As Object
  3.     Dim ts As Object
  4.     Set fso = CreateObject("Scripting.FileSystemObject" )
  5.     Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
  6.     GetBoiler = ts.readall
  7.     ts.Close
  8. End Function


 
Pour ne pas que ton texte apparaisse à la suite, il faut que tu utilises du code HTML.
En cherchant vite fait sur google, cela donnerait :
.HTMLBody = RangetoHTML(rng) & "<HTML><BODY>je saute la ligne ici <br> et voilà!</BODY></HTML>"

Reply

Marsh Posté le 16-05-2013 à 17:33:14    

Ma signature ne s'insert pas :/
 
Est-ce que le fait que le code soit avant le "With OutMail" et donc les destinataires, le sujet, le corps, ça joue?

Reply

Marsh Posté le 16-05-2013 à 17:38:01    

Tu as bien mis le bon chemin ici :
"\Microsoft\Signatures\Nom de ta signature dans outlook.htm"
 
PS : il faut que tu changes Nom de ta signature dans outlook hein ;)

Reply

Marsh Posté le 16-05-2013 à 17:40:16    

oui bien sur mdr!
C'est mon Prenom et mon Nom, avec un espace entre les deux, mais ça ne fonctionne pas :/

Reply

Marsh Posté le 16-05-2013 à 17:50:11    

Tu as vérifié que "\Microsoft\Signatures\TonPrénom TonNom.htm" existe sur ton disque dur ?

Reply

Marsh Posté le 17-05-2013 à 10:24:45    

Elle existe, j'ia fait une recherche avec le mot clef "signature"

Reply

Marsh Posté le 17-05-2013 à 10:39:50    

étrange, cela marche bien chez moi.
tu as quoi comme erreur ?

Reply

Marsh Posté le 17-05-2013 à 10:48:40    

Aucune erreur, la signature ne se met pas tout.
Est-ce qu'il faut préciser le serveur C:/?
 
Parce que j'ai 9 serveurs sur ce pc.

Reply

Marsh Posté le 17-05-2013 à 11:25:51    

S'il ne met rien, c'est qu'il ne trouve pas ton fichier.
Tu es sous windows 7 ?
 
Si oui, regarde dans c:\utilisateurs\TonCompteUtilisateur\AppData\Roaming\Microsoft\Signatures et regarde qu'il y ait bien le fichier TonPrénomTonNom.htm

Reply

Marsh Posté le 17-05-2013 à 13:12:28    

Dans mon c:\utilisateurs\mon id    je n'ai accès qu'à mes documents, ma musique, mes images, etc (les autres dossiers doivent être masqués)
 
Si je fais une recherche, je trouve que ma signature "Valerie" (je l'ai renommé pour éviter l'espace) se trouve quand même bien dans c:\utilisateurs\ccbd (mon id)\AppData\Roaming\Microsoft

Reply

Marsh Posté le 17-05-2013 à 14:30:19    

c'est bien un fichier htm ?

Reply

Marsh Posté le 17-05-2013 à 16:01:10    

Oui je l'ai est au format .htm et .rtf

Reply

Marsh Posté le 17-05-2013 à 16:07:32    

Alors je comprends pas, désolé.

Reply

Marsh Posté le 17-05-2013 à 16:09:38    

ALLELUIA !
Faute vraiment bête . . . dans mon .HTMLBody = StrBody & RangetoHTML(rng) j'avais oublié le & Signature!
 
Par contre, mon logo ne s'insert pas dans ma signature (pas très très grave mais pas parfait)

Reply

Marsh Posté le 17-05-2013 à 16:10:37    

Merci milles fois Takama13 !!  :bounce:  
 
Je ne m'en serai jamais sortie sans toi!  :)  :)

Reply

Marsh Posté le 17-05-2013 à 16:15:51    

La fontion GetBoiler lit ta signature en mode texte.
Donc pas de logo.

 

et de rien :jap:


Message édité par Takama13 le 17-05-2013 à 16:16:10
Reply

Marsh Posté le 17-05-2013 à 16:17:16    

On peux pas mixer texte + image?

Reply

Marsh Posté le 17-05-2013 à 16:19:16    

Je ne sais pas.
J'ai récupérer le code sur le lien que j'ai donné plus haut.
Je n'ai pas de logo dans ma signature donc je ne me suis pas posé la question.

Reply

Marsh Posté le 17-05-2013 à 16:21:33    

Ah d'accord.
Ce n'est pas très grave c'est un petit détail.
 
Encore merci! :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed