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

Dudu2

XLDnaute Barbatruc
re ben ca c'est dans une sub que tu le fait dans la sub out loo
C'est dans mes fonctions qui formatent un HTML avec les images inline Base64.
Pour l'instant, si j'ai les fonctions qui formatent un mail Outlook avec Publish, je n'ai pas encore intégré ton code pour Outlook.

Je n'ai pas mis les fichiers pour te laisser tester avec tes propres fonctions pour faciliter.
htmlbody="bonjour salut<br>ci-joint le tableau des ventes du mois<br>" & code &"<br>en vous souhaitant bonne reception<br>patrick à votre service"
Avec ça tu obtiens quoi comme mail ?
 

patricktoulon

XLDnaute Barbatruc
re
1662921959358.png
 

patricktoulon

XLDnaute Barbatruc
en effet dans la page web la suite se met en plein dans la table alors j'ai palier comme ca en attendant demain de regarderais comment faire en DOM

VB:
Sub TestFichierWebAvecImages()
    Dim code$, I&, FichierHTML$, DossierImages$, nom$, RnG As Range, br
    Set RnG = Feuil1.[C4:I13]
    br = Application.Rept("<br>", RnG.Rows.Count + 3)
    nom = "imgTable_" & Replace(RnG.Address(0, 0), ":", "-")
    FichierHTML = ThisWorkbook.Path & "\" & nom & ".html"
    DossierImages$ = ThisWorkbook.Path & "\" & nom
    DrawingObjects_To_Png_File RnG, DossierImages

    code = CreateTableBase2(RnG)    'on recupere la table seule (sans les images ) ' les cellules HTML !! ont pour ID l'address des cellules de RnG
    code = PutShapOnHtmlOutlook(code, RnG, DossierImages)    'on ajoute les images avec (src du fichier) dans le code html de la table
    code = "bonjour salut<br> <br>ci-joint le tableau des ventes du mois<br>" & code
    code = code & br & "en vous souhaitant bonne reception<br>patrick à votre service"

    
    I = FreeFile: Open FichierHTML For Output As #I: Print #I, code: Close #I
    MsgBox "le chemin de votre fichier :" & vbCrLf & FichierHTML & vbCrLf & "les image sont dans :" & vbCrLf & DossierImages
End Sub
1662923681951.png
 

patricktoulon

XLDnaute Barbatruc
j'ai trouvé
j'ai simplement oublié de le dimensionner
le debut de la fonction modifiée
VB:
Function CreateTableBase2(RnG As Range)
' fonction de base de creation de table html sur la base d'une rng de cellule (accepte les fusions )
' patricktoulon
    Dim lig&, col&, cel As Range, Addr$, doc As HTMLDocument, Table, TR, TD, Font, ImG, shap As Shape
    Dim Div, ht, texte, al, Ep, c, dossier, Val
    Set doc = New HTMLDocument    ' creation d'un dochtml virtuel(en memoire )(late binding donc sans reference )
    doc.body.innerhtml = ""
    Set Div = doc.createElement("div")    'creation de l'element html div qui contiendra tout
    doc.body.appendchild (Div)    ' on la met dans le body du document virtuel
    'Div.contenteditable = True
    With Div.Style
    .Height = Round(RnG.Height * 1.5)
    .Width = "100%"
    '.Border = "3pt solid red"   'juste pour le voir  pendant les tests
     '.Position = "absolute"' on doit le laisser  se loger selon le flux
  End With
 
    Set Table = doc.createElement("table")    'creation de l'element html table
 

patricktoulon

XLDnaute Barbatruc
re
oui je pourrais je l'avais deja fait
mais est ce utile de convertir une plage dont une partie est sans bordure donc invisible (MAIS BIEN PRESENTE DANS LA TABLE HTML)

aujourd'hui je suis allé un peu plus loin dans le conceptuel V4.8
j'ai ajouté la modif du menu contextuel des cells pour convertir a la volée
les sub de test sont donc maintenant argumentée
rien empêche de garder ou d'utiliser les subs dans la version 4.7 les fonctions html et image restent les mêmes

pour le DisplayGridlines je regarde çà tout a l'heure là je dois partir
c'est rien du tout a modifier
en attendant teste cette version 4.8

demo.gif
 

Pièces jointes

  • 11Range to Html by code early bindig 2022 V 4.8.xlsm
    281.1 KB · Affichages: 2

Dudu2

XLDnaute Barbatruc
Pour info avec ton code, je dois sauvegarder au début puis restorer à la fin le Rng.parent.parent.Saved.
Je ne sais pas ce qui le modifie dans le code (toujours difficile à savoir) mais il n'y a pas de raison que la conversion d'un Range en HTML génère une modif de classeur du Range.

C'est un détail mais si tu peux intégrer ce save/restore dans ton code...
 

patricktoulon

XLDnaute Barbatruc
re
et oui c'est le fait d'ajouter le menu et de l'enlever qui fait que le classeur demande enregistrement des changement
comme ça sera un xla(m) a la fin il n'y aura plus de soucis avec ça

Oui cool le menu contextuel ! Tu fais des trucs de l'espace !

pourtant je suis bien sur terre 🤣 mais je l'ai tellement travailler ce projet de différente manière que je cherche maintenant a le rendre le plus facile a utiliser
bon allez je rgarde ton displaygridline je revien apres avec un truc de la planete spok
 

patricktoulon

XLDnaute Barbatruc
quel bug?
si c'est du décalage que tu parle là j'y suis pour rien c'est chez toi que le graphique déraille
les dimensions sont en dur en inline il est facile d'aller voir avec l'inspecteur de document

si c'est une épaisseur de bordure ,zoom sur html et tu verra que c'est bon
c'est juste le rendering FF qui fait ça

version 4.9 beta
displayGridLine false ou true
basé sur une nouvelle fonction que je viens d'ajouter
c'est la fonction UsedRangeOnRange son nom est suffisamment explicit je pense
ne fonctionne pas avec le menu contextuel pour l'instant
fonctionne avec le checkbox
 

Pièces jointes

  • 11Range to Html by code early bindig 2022 V 4.9.xlsm
    288.6 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
314 017
Messages
2 104 587
Membres
109 084
dernier inscrit
mizab