Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
ah!!.. ok je change

le code userform
VB:
Private Sub CommandButton1_Click()
    Dim Cod64$, ImG As Object, cc, chemin$
    chemin = ThisWorkbook.Path & "\Penguins.jpg"
    With WebBrowser1
        .Navigate "about:blank"
        Do While .ReadyState < 4: DoEvents: Loop
        Set ImG = .Document.body.appendchild(.Document.createElement("img"))
        .Document.body.appendchild (.Document.createElement("br"))
        Do While .Busy: DoEvents: Loop
        With ImG

            .src = "data:image/" & "jpg" & ";base64," & Base64EncodeFile(chemin)

            cc = Split(ImG.outerhtml, "base64,")(1)
            t1 = "les 100 premiers caratères DU SRC DE L'IMAGE" & vbCrLf & Left(cc, 100)
            t1 = t1 & vbCrLf & "*****************************************************************"
            t1 = t1 & vbCrLf & "les 100 derniers caratères " & vbCrLf & Right(cc, 100)





            t2 = "les 100 premiers caratères retournés par la fonction " & vbCrLf & Left(Base64EncodeFile(chemin), 100)
            t2 = t2 & vbCrLf & "*****************************************************************"
            t2 = t2 & vbCrLf & "les 100 derniers caratères " & vbCrLf & Right(Base64EncodeFile(chemin), 100)

            .Height = 100
            .Style.Border = "1pt solid red"

        End With
        Set div = .Document.body.appendchild(.Document.createElement("div"))
        With div.Style: .overflow = "scroll": .WordWrap = "break-word": .Position = "absolute": .Width = 290: .Height = 100: .Left = 210: .Top = 10: End With
        div.innerhtml = Base64EncodeFile(chemin)

        x = .Document.body.innerhtml
        .Document.write x
    End With
End Sub
 

Dudu2

XLDnaute Barbatruc
Bon, j'ai compris, je vais conserver ce Inline en Base64 comme une option de représentation du HTML.
Et pour ce d'Outlook, je vais créer une option pour remplacer les src= par les cid=.
Mais bon pas ce soir parce que j'ai les neurones en compote.
Bonne soirée
 

patricktoulon

XLDnaute Barbatruc
ben c'est ce que je t'ai dis en page 2 le base64 c'est pour un fichierhtml en lecture mais pour le mail il faut oublier
cela dis dans les versions antérieures de outlook on pouvait récupérer le mime
peut être est ce toujours possible faudra que je fasse des recherches
je vais voir pour le streamer

pourrais tu me faire ton dernier exemple mais pas dans le dossier temps plutot sur le bureau j'ai essayé mais ca me sort que le fichier html le dossier je sais pas ou il va
 

patricktoulon

XLDnaute Barbatruc
non tu ne m'a pas compris
le fichier html oui il est bien sur le bureau mais le dossier image non
mais c'est pas grave j'ai trouvé ma solution pour enregistrer une shape en PNG sur le bureau en gardant la transparence et semie transparence
 

Dudu2

XLDnaute Barbatruc
Le dossier images il va au même endroit que le fichier .htm.
D'ailleurs je ne le gère pas, c'est automatique.

Sinon j'ai essayé avec les CID. Ca semblait simple mais ça ne marche pas ! Et là je suis à cours d'idées.
 

patricktoulon

XLDnaute Barbatruc
re
je vais chercher j'avais donné un exemple avec plusieurs image
il faut a tout pris que le CSS soit inline sinon ça ne peut pas marcher
tu te prends tro la tete a essayer avec la methode publier c'est imbuvable a normaliser pour outlook et autres app mail

du coup de mon coté avec le webbrowser j'ai encore trouvé une astuce
à savoir:
exporter les drawingobjects en png avec transparence et translucidité conservées

ça fait des années que je cherchait ça
du coup maintenant j'ai tout
mon range to html by userform
et le code html obtenu est largement plus propre et intelligible pour celui qui a un minimum de base en code html

et maintenant mon shape to pngfile avec userform



je l'adore ce webbrowser je vais voir si il peut me faire la cuisine aussi
 

patricktoulon

XLDnaute Barbatruc
re
dezip sur ton bureau
dans le dossier lance le fichier xl
lance la sub test
tape pour outlook dans l'inputbox
dans la sub gotooutlook tu verra comment je fais
 

Pièces jointes

  • test dudu.zip
    43.8 KB · Affichages: 4

Dudu2

XLDnaute Barbatruc
En fait cette daube d'Outlook, non seulement ne sais pas traiter le Base64 inline que tout les afficheurs d'HTML savent gérer, mais en plus il cafouille sur d'autres subtilités du HTML que les autres savent aussi gérer. C'est vraiment de la grosse daube MS !

Outlook:

Thunderbird:
 

patricktoulon

XLDnaute Barbatruc
a ben je te lai dis
outlook ça se travaille en richtext maintenant avec le documentinspector
je ne pige pas moi même toutes les subtilités

EmClient accepte le base64 aussi

cela dit CDO reste la solution la plus libre
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…