XL 2016 VBA - Range to HTML incluant les objets de la feuille (boutons, images, ...)

Dudu2

XLDnaute Barbatruc
Bonjour,

Je n'ai rien trouvé qui fonctionne pour convertir un Range en HTML qui inclurait tout ce qu'il y a dans le Range en question.

J'ai bien récupéré la fonction de Ron de Bruin omni-présente sur le Web qui fonctionne uniquement pour les valeurs de cellules et leurs formats, sauf pour les tableaux structurés qui ne sont pas en exclusivité dans le Range qui perdent alors leurs formats (qui n'en sont pas vraiment !).
 

Pièces jointes

  • Classeur1.xlsm
    261.1 KB · Affichages: 11

patricktoulon

XLDnaute Barbatruc
Bonjour @Dudu2
oui il fonctionne partout (tout navigateur)même CDO(testé) mais pas sur outlook
non vraiment outlook a son propre mime et on peut rien y faire
c'est pour ça qu'il se travaille comme un document WORD( les librairie sont dispos dans excel d'ailleurs)
conclusion: a moins de dormir sur la tête html/outlook oublie

je l'ai regardé un peu le mime en sortie ; purré c'est mort
car en effet il me sort quelque chose de similaire à publier de excel

le truc marrant c'est que m'envoie un mail avec CDO (en html classique)et je le regarde quand il est arrivé dans outlook et que je regarde le code il est avec son mime et plus comment je l'ai envoyé
 

Dudu2

XLDnaute Barbatruc
En effet. Outlook & Word même combat. Ne savent pas interpréter le HTML standard !

Dans ma ressource V2 d'interface Outlook en attente de publication, j'ai basculé sur la représentation en Image du Range avec ses objets. Seule option WYSIWYG.

Peux-tu m'expliquer ton alternative au src=cid:xxx + Attachement pour Outlook ?
 

Dudu2

XLDnaute Barbatruc
Avec Publier c'est donc la meilleure approximation qu'on puisse obtenir à ce stade.
Excel:
1660994767129.png

Outlook:
1660994723235.png

Thunderbird (et tous les Browser Internet):
1660995125726.png

Il faudrait bidouiller le HTML pour tenter des corriger, ce que j'ai tenté de faire, mais je ne connais pas assez.
 

Pièces jointes

  • 20-08-22-13-27-41.zip
    879.5 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
re
Bonjour @Dudu2
chez moi outlook 2013 je n'ai pas tout à fait le même résultat que toi(dans tes captures précédentes c'est ça le problème
et le must c'est que la fonction lancée plusieurs fois j'obtiens parfois un email rendering différent
c'est pour ça que j'adhère pas a la méthode publier
mais bon j'attends ta version finale
 

Dudu2

XLDnaute Barbatruc
Bonjour @patricktoulon,
Pour Outlook, la méthode Publier fonctionne parfaitement pour le Range sans les Objets.

Quand on veut inclure les Objets, il n'y a pas d'autre alternative que la méthode Publier dont je sais très bien qu'elle ne donne pas des résultats satisfaisants. Seulement approximatifs. Mais comme c'est la seule solution identifiée jusqu'à présent...

Pour l'export en Base64 qui utilise aussi la méthode Publier mais qui ne concerne pas Outlook, comme je l'ai dit dans le Post précédent, j'attends ton code pour l'utiliser et exporter en HTML inline Base64 les images.
 

patricktoulon

XLDnaute Barbatruc
ben pour le base 64 on a tous apeu pres les memes fonctions
VB:
'******************************************
'base64 module pour fonction range to html
'auteur :patricktoulon sur developez.com
'version:1.2
'date version 12/07/2015
'*******************************************
Sub test()
MsgBox FichierToBase64("C:\Users\Public\Pictures\Sample Pictures\Koala.jpg")
End Sub

Public Function FichierToBase64(chemin As String) As String
    Dim XmlDoc As Object, XmlNode As Object, Streamer As Object
    Set Streamer = CreateObject("ADODB.Stream")
    Set XmlDoc = CreateObject("MSXml2.DOMDocument")
    With Streamer
        .Type = 1
        .Open
        .LoadFromFile (chemin)
        Set XmlNode = XmlDoc.createElement("Base64Data")
        XmlNode.DataType = "bin.base64"
        XmlNode.nodeTypedValue = Streamer.Read()
    End With
    FichierToBase64 = XmlNode.Text
    Set XmlDoc = Nothing: Set XmlNode = Nothing: Set Streamer = Nothing
End Function


Sub test2()
Dim chemin$, cod64$
chemin = Environ("userprofile") & "\DeskTop\monimage.png"
Base64ToFichier Feuil1.[A1].Text, chemin 'le code base64 est dans la cellule A1
End Sub


Function Base64ToFichier(ByVal strData As String, ByVal chemin As String)    ' As Object
    Dim XmlDoc As Object, objNode As Object, a() As Byte, Buffer() As Byte, i&
    Set XmlDoc = CreateObject("MSXML2.DOMDocument")
    With XmlDoc.createElement("b64")
        .DataType = "bin.base64"
        .Text = strData
        a = .nodeTypedValue
        Set XmlDoc = Nothing
        '///////////////////////////////////
        i& = FreeFile: Open chemin For Binary As #i: Put #i, , a: Close #intFileNumber
    End With
End Function
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour Dudu2
en attente d'approbation

je t'en donne la primeur avec un exemple ici
module pour la fonction
1 module pour les sub de test
le module userform grabber"CaptureX" pour capturer les images en png
la fonction base 64 intégrée
la fonction xlcolortohtml intégrée
la fonction htmltexte intégré
la fonction ConvertBorderStyle intégrée

Enjoy ;)
 

Pièces jointes

  • Range to Html by code 2022.xlsm
    274.1 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 839
Messages
2 092 678
Membres
105 508
dernier inscrit
Albator