Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2016VBA - Range to HTML incluant les objets de la feuille (boutons, images, ...)
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 !).
La solution de @Dudu2 dans le fichier joint pour chacune des situations:
- Créer un fichier .htm et son répertoire associé de fichiers images
- Créer un fichier .htm unique contenant les images codées en Base64
- Créer un mail Outlook
Je ne sais pas où tu a placé ta méthode pour avoir les images "inline".
Il faut effectivement remplacer les références aux fichiers images par le contenu.
re
non je n'ai pas placé les images inline
c'est le code CSS qui est inline
ceci (ci dessous)et tout les autre entêtes de compatibilité d'ailleurs <Style>
/blablabla
/...
'/etc...
</Style>
outlook ne les prendra pas en compte
il reprends que le body innerhtml il met ses entêtes à lui
résultat tu n'aura plus les styles de ta table
la méthode publier (all include)est bonne si tu veux ton document en html c'est tout
crois moi j'en ai fait le tour
c'est pas le bon chemin si tu veux travailler outlook en HTML
si tu veux ta plage dans le corps du mail travaille en code inline
Je ne me vois pas générer le HTML du Range et ses Objects à la mano pour avoir ces images "inline" ou "instream". C'est bien trop complexe. Pour moi en tous cas.
Soit je trouve un moyen d'inclure le binaire des images dans le HTML à la place de la référence fichier, soit j'essaie de les placer en Attachements et en faire des Embbeded Images.
re
je ne parle pas des images pour inline
je parle des properties des balises TD/TR
pour les images c'est assez simple en fait
for each shap in activesheet.shapes
if not intersect(rng,shap.topleftcells) is nothing then
'sauve avec un shart(methode hyper connu avec un chemin + le nom de la shap+".jpg" )
'dans le document html
set img=.document.createelement("img")
with img
.src="le chemin+le nom de la shape"'chemin préalablement etabli plus haut
with .style
.position="absolute"
.left=shap.left &"pt"
.top=shap.top & "pt
.width=shap.width & "pt"
.height=shap.height &"pt"
end with
end with
end if
next
parti de là tu a tes balises img en bas du code html mais il sont en position absolute donc à leur place
tout ca tu le fait dans document html soit dans IE(un peu lourd ) soit dans un htmlfile
mais avec un export par publier le code est invalidé dans outlook
juste pour le fun si tu peux utiliser un webbrowser dans ta version d'excel
prend un exemple de ton fichier ferme tout les autres
met lui un userform( ne met pas de controls)
dans son module colle lui ca
VB:
Public Function GetHtmlCodeOfRange(rng As Range)
Dim Web As Object, Div As Object, a&
Application.CopyObjectsWithCells = False
[c4:i13].Copy
Set Web = Me.Controls.Add("Shell.Explorer.2", "wb1")
With Web
.Navigate "about:blank"
Do While .readystate < 4: DoEvents: Loop
Set Div = .Document.body.appendchild(.Document.createelement("div"))
With Div
.contenteditable = True
.Style.Width = "200px"
.Style.Height = "200px"
.Style.backgroundcolor = "rgb(100,200,255)"
End With
' MsgBox .Document.body.innerhtml
Div.Focus
.ExecWB OLECMDID_PASTE, OLECMDEXECOPT_DONTPROMPTUSER
DoEvents
End With
'converter.Show 0
GetHtmlCodeOfRange = Div.innerhtml
End Function
dans un moule normal met ceci
VB:
Sub test()
Dim I&, code$, chemin$
I = FreeFile
chemin = Environ("userprofile") & "\DeskTop\test.html"
code = converter.GetHtmlCodeOfRange([c4:i13])
Open chemin For Output As #I: Print #I, code: Close #I
End Sub
lance la sub test et ouvre le fichier avec ton explorer et regarde la source
c'est ça du code inline
OK, je regarderai ça demain. Mais à la 1ère lecture je ne comprends rien de rien à ton code.
Ce que je ne comprends pas c'est que mes extensions Firefox pour copier la page Web en 1 seul fichier (Save Page WE ou Single File) n'arrivent pas à capturer les images. J'ai tout essayé dans le code source et le FileList.xml, rien à faire. J'aurais pu m'inspirer du HTML résultat mais bon ça veut pas !
re
oui je sais il ne fait pas les alignement les wordwrap et 2 trois petite choses
dans mon message precedent je te montre le resultat de ma fonction que je t'ai donné en premier et que j'ai modifié pour les drawingobjects
In this snippet, we’re going to demonstrate how you can display Base64 images in HTML. Use the HTML <img> element to embed Base64 encoded image into HTML.
www.w3docs.com
De mon point de vue, c'est pas le plus simple mais le plus sûr car le Publier conserve bien tous les formats.
Mais bon, me faudra du temps vu que je ne suis pas à l'aise avec la récupération du binaire d'un fichier. Edit: en plus c'est super compliqué car s'il n'y avait que des tags <img src=> ça irait mais ya aussi des tags <imagedata src=> dont je ne sais que faire.
re
ce n'est pas en binaire mais en base 64
c'est un code imbuvable et qui n'est plus accepter non plus par toute les app mail
d'ailleurs outlook a son propre mime du base 64
les seules solution sont
soit passer par le range des paragraphe de l'item mail du document inspector dans outlook(j'ai déjà montré un exemple ya pas si longtemps )
soit en html avec dossier d'images
et crer les lien CID en creant les relativepartavec les lien des images et remplacer dans le code html les liens des images par les CID
petite demonstration avec mon astuce userform modifié et amélioré
pour le codage du src en base 64
tiens va voir ici
pour reprendre l'idée de Silkyroad( stocker et visionner des images en binaire dans un classeur son classeur fonctionnant très bien mais étant limité par les tailles des images quasi impossible avec des jpeg de
www.developpez.net
et le code du fichier html obtenu
les images sont tout en bas du code
Ok oui je sais que c'est en Base64.
Je suis en train de placer les images converties en Base64 en inline dans le HTML en remplacement des URLs.
J'ai des difficultés annexes liées au répertoire des images associé au fichier HTML que je n'arrive pas à supprimer car RmDir ne reconnait pas son nom.
Je finirai par y arriver ... ou pas
après attention!!
toute les app mail n'acceptent pas les images en base 64
ce qu'il faut trouver c'est le code pour le mime base 64 de outlook
et c'est pas gagné
Le mieux serait d'attacher les fichiers images et d'y faire référence par les CID dans Outlook, comme les Embbeded Images que je traite déjà dans mon interface.
Mais je ne sais pas comment remplacer les src="fichier image" en CIDs.
Il faudrait connaître la syntaxe exacte ou l'étudier. Je verrai ça dans un 2ème temps.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.