macro excel mise en forme corps message (balise HTML)

ledzepfred

XLDnaute Impliqué
Bonsoir le forum,

j'ai créé une macro qui permet d'envoyer un email via outlook depuis excel
Le corps du message est définie par une plage de cellule et je souhaitais intégrer la mise en forme de ces cellules (chaque cellule peut avoir une mise en forme différente) dans le corps du message par utilisation de balises HTML.

Je récupère bien la police de chaque cellule ainsi que la taille et la propriété colorindex grâce à une fonction GetRGB
Tout fonctionne parfaitement sauf la partie Select Case.... End Select qui permet d'ajouter les balises <u> et </u> si la cellule est soulignée et les balises <b> et </b> si cette cellule est en gras. Quatre cas sont donc possibles mais ça ne fonctionne pas

Code:
For i = 2 To lig 'boucle définissant le corps du message et son format du coprs du message par des balises HTML
   With Sheets("email").Cells(i, 2)
     Select Case Sheets("email").Cells(i, 2)
       Case [COLOR="Magenta"].Font.Bold = True [/COLOR]And [COLOR="Blue"].Font.Underline = xlUnderlineStyleSingle[/COLOR]
         CORPS = CORPS & "<br>[COLOR="Blue"]<u>[/COLOR][COLOR="Magenta"]<b>[/COLOR]<font style='font-family: " & .Font.Name
         CORPS = CORPS & ";font-size: " & .Font.Size
         CORPS = CORPS & "pt ;' color=" & GetRGB(.Font.Color)
         CORPS = CORPS & ">" & .Value & "</font>[COLOR="magenta"]</b>[/COLOR][COLOR="Blue"]</u>[/COLOR]"
       Case [COLOR="magenta"].Font.Bold = False[/COLOR] And [COLOR="Blue"].Font.Underline = xlUnderlineStyleSingle[/COLOR]
         CORPS = CORPS & "<br>[COLOR="Blue"]<u>[/COLOR]<font style='font-family: " & .Font.Name
         CORPS = CORPS & ";font-size: " & .Font.Size
         CORPS = CORPS & "pt ;' color=" & GetRGB(.Font.Color)
         CORPS = CORPS & ">" & .Value & "</font>[COLOR="Blue"]</u>[/COLOR]"
       Case [COLOR="magenta"].Font.Bold = True [/COLOR]And [COLOR="Blue"].Font.Underline = xlUnderlineStyleNone[/COLOR]
         CORPS = CORPS & "<br>[COLOR="magenta"]<b>[/COLOR]<font style='font-family: " & .Font.Name
         CORPS = CORPS & ";font-size: " & .Font.Size
         CORPS = CORPS & "pt ;' color=" & GetRGB(.Font.Color)
         CORPS = CORPS & ">" & .Value & "</font>[COLOR="magenta"]</b>[/COLOR]"
       Case Else
         CORPS = CORPS & "<br><font style='font-family: " & .Font.Name
         CORPS = CORPS & ";font-size: " & .Font.Size
         CORPS = CORPS & "pt ;' color=" & GetRGB(.Font.Color)
         CORPS = CORPS & ">" & .Value & "</font>"
     End Select
   End With
Next

En pièce jointe mon code qui se lance depuis le bouton envoi email

Merci de me dire où j'ai commis une erreur

A+
 

Pièces jointes

  • envoi email.zip
    21.4 KB · Affichages: 99
  • envoi email.zip
    21.4 KB · Affichages: 92
  • envoi email.zip
    21.4 KB · Affichages: 96
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : macro excel mise en forme corps message (balise HTML)

bonjour lepzedfred

A premiere vue ton fichier n'a pas le code
Peux-tu poster ta fonction GetRGB
et verifier cette ligne:

Code:
 Case [COLOR=magenta].Font.Bold = True [/COLOR]And COLOR="Blue"].Font.Underline = xlUnderlineStyleSingle
 

ledzepfred

XLDnaute Impliqué
Re : macro excel mise en forme corps message (balise HTML)

bonjour pierrejean,

Merci de ta réponse.
ci-joint le fichier avec la fonction GetRGB mais qui n'est pas liée à mon pb. Je précise que le code de la fonction est placé dans la feuille tcd.
Ai modifié la ligne de mon précédent post.

Merci
 

Pièces jointes

  • envoi email.zip
    43.6 KB · Affichages: 71
  • envoi email.zip
    43.6 KB · Affichages: 72
  • envoi email.zip
    43.6 KB · Affichages: 69
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : macro excel mise en forme corps message (balise HTML)

Re

Je n'ai pas Oulook (j'utilise Outlook Express)
mais je te suggere d'ajouter le 2 lignes suivantes juste avant celle ci
Code:
Set OutApp = CreateObject("Outlook.Application")

Code:
COPIE = Right(COPIE, Len(COPIE) - 1)
DESTI = Right(DESTI, Len(DESTI) - 1)
 

ledzepfred

XLDnaute Impliqué
Re : macro excel mise en forme corps message (balise HTML)

bonsoir pierrejean, le forum,

merci de ta réponse, concernant ta remarque

Pour les lignes
Code:
COPIE = Right(COPIE, Len(COPIE) - 1)
DESTI = Right(DESTI, Len(DESTI) - 1)
Elles sont inutiles dans la mesure où outlook enlèves tout seul comme un grand les séparateurs en trop mais pour les éditeurs de messagerie qui n'ont pas cette faculté, c'est interessant.

Concernant mon problème, j'ai finalement trouvé la solution (avec cerise sur le gateau l'intégration de la propriété italique)
J'ai utilisé une variable MISENFORM qui représente la somme de :
GRAS (200 si bold=true ou 100 si bold=false),
ITAL(20 si italic=true ou 20 si italic=false)
et SOUL (2 si souligné, 1 si non)
Ensuite j'affecte en fonction des 8 possibilités une valeur pour MISENFORM1 (ouverture des balises :<b> si gras,<i> si italic, <u> si souligné) et MISENFORM2 (fermeture des balises : </b>, </i> et </u>)
Restait ensuite à intégrer MISENFORM1 et MISENFORM2 dans la variable CORPS.
J'ai également intégré une condition si la cellule est vide, dans ce cas on ajoute à CORPS, la balise <br> permettant un renvoi à la ligne.

Au final, le code suivant fonctionne parfaitement :
Code:
For i = 2 To lig 'boucle définissant le corps du message et son format du coprs du message par des balises HTML
    With Sheets("email").Cells(i, 2)
        If .Value <> "" Then
            If .Font.Bold = True Then GRAS = 200 Else GRAS = 100
            If .Font.Italic = True Then ITAL = 20 Else ITAL = 10
            If .Font.Underline = xlUnderlineStyleSingle Then SOUL = 2 Else SOUL = 1
            MISENFORM = GRAS + ITAL + SOUL
            Select Case MISENFORM
                Case 222
                    MISENFORM1 = "<b><i><u>": MISENFORM2 = "</b></i></u>"
                Case 212
                    MISENFORM1 = "<b><u>": MISENFORM2 = "</b></u>"
                Case 221
                    MISENFORM1 = "<b><i>": MISENFORM2 = "</b></i>"
                Case 211
                    MISENFORM1 = "<b>": MISENFORM2 = "</b>"
                Case 122
                    MISENFORM1 = "<i><u>": MISENFORM2 = "</i></u>"
                Case 121
                    MISENFORM1 = "<i>": MISENFORM2 = "</i>"
                Case 112
                    MISENFORM1 = "<u>": MISENFORM2 = "</u>"
                Case 111
                    MISENFORM1 = "": MISENFORM2 = ""
            End Select
            CORPS = CORPS & MISENFORM1
            CORPS = CORPS & "<br><font style='font-family: "
            CORPS = CORPS & .Font.Name
            CORPS = CORPS & ";font-size: " & .Font.Size
            CORPS = CORPS & "pt ;' color=" & GetRGB(.Font.Color)
            CORPS = CORPS & ">" & .Value
            CORPS = CORPS & "</font>" & MISENFORM2
        Else: CORPS = CORPS & "<br>"
        End If
    End With

ci-joint fichier avec la correction.
Etant perfectionniste, j'aimerai bien comprendre pourquoi mon premier code ne fonctionne pas, tu as une idée?

A+
 

Pièces jointes

  • envoi email.zip
    46.6 KB · Affichages: 126
  • envoi email.zip
    46.6 KB · Affichages: 124
  • envoi email.zip
    46.6 KB · Affichages: 131
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 538
Messages
2 089 404
Membres
104 160
dernier inscrit
dqldq