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

EXCEL :: Les Tableaux Structurés :: Une classe VBA - V1.06+1.07 - exports CSV, XML, XML UTF-8, JSON, HTML, PDF, JPG, JPEG, BMP, EXCEL

  • Initiateur de la discussion Initiateur de la discussion oguruma
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bonsoir Patrick
Bon après une bonne journée de repos.. j'ai un peu récupéré... la cortisone y a que ça qui marche pour te retaper

pour la(CSV, JSON , XML3 , HTML) tu a" la" possibilité d'exporter la table avec le header ou pas et le total ou pas ==> en effet c'était ce que j'avais envisagé dans certains départs de code... comme tu l'as vu ça n'était pas finalisé mais là on se rejoint totalement. Dans nos échanges de versions... je crois que nos codes se sont en plus croisés sur certains post... en effet ça arrive.
Ce qui manque dans le forum, je pense, c'est un espace collaboratif de développement quand "des vieux de la vieille" comme nous, ont des projets communs pour partager des outils comme ça été le cas sur cette classe. Ainsi par un jeu de versionning on serait tous sur les mêmes versions.
Je ne sais si cela est possible ? Monsieur l'Admin du site ? Possiblo ?

comme ça faisait un peu trop de bouton j'ai fait un menu popup ==> Ah top pas mal comme idée - mon but était de faire du "one shot" sans faire de dentelles pour les tests... après restait le RUN à la mano dans VBE... c'est ce que j'avais fait dans les derniers du coding. 🙂

je suis en train de te finir la V 1.7 ==> on risque peut-être de partir dans des façons différentes de procéder. Go pour toi. 🙂

Pour conclure sur cette classe qui a généré beaucoup d'échanges d'idées, j'étais loin de penser que ce besoin au moment de sa conception avait tout son sens. Ceci prouve que ça manquait dans le forum. Je te laisse donner le CLAP de fin qui te revient à juste titre. Tu as été le fédérateur d'une grande partie des évolutions. Ma contribution n'a été que mineure sur les dernières versions.

En toute sincérité ça me gênerait de reprendre les dernières évolutions sous mon Pseudo. Je te laisse donc avec le plus grand plaisir la dernière signature de la version GOLD 🙂 - Un grand merci à toi pour ces échanges.

A chacun sa façon de coder qui se respecte. COBOLIST/PL1List de formation, d'origine Mainframe (et j'en passe) avec en parallèle du BASIC sur mini système Texas-Instrument et bien plus sur d'autres OS, on garde encore certaines traces.

Je te propose donc si tu veux bien de faire un post spécifique sous ton Pseudo sous une version 2.0. La 1.xx n'a plus de sens selon moi. A toi de voir.

Bonne soirée et bon long Wequend du 8 mai.
 
Dernière édition:
bonsoir @oguruma
ben non ça reste ton bébé
j'ai juste adapté mes fonctions perso DOM/VBA ou VBA/DOM (c'est mon dada ça )
je suis resté dans ton organisation et forme de codage

c'est un très bon entrainement pour varier ses formes de codage

si ça t’intéresse javais déjà fait une fonction listobject to html qui le restitue au pixel près
va voir ça
 
Bonjour @patrick, Le Forum,
Ohh Grand OUI ça m'intéresse 🙂 car pour la petite histoire j'avais fait un truc du genre moins sophistiqué pour un client (banque) sur le poste qui m'a été confié. Je m'étais limité à construire un tableau avec des simples TR.. TD.. etc. sans mise en forme. Pour les besoins exprimés ça suffisait.
Malheureusement tous les échanges externes étaient tracés et interdits aux risques de se faire éjecter. Donc je n'ai pas pu le récupérer... en fin de projet je n'ai pas eu le reflexe de faire une photo du code 🙁.
Ca concernait des tableaux avec des KPI sur de la volumétrie de traitements Batch sur mainframe.
C'était dans mes projets de le refaire.... bah oui, je vais partir de ton code... et je verrais par la suite. Merci. Bon Week.
 
normalement tu a tout
y compris la fonction codecouleur (vb/html) y compris la traduction d'un texte multi format dans une cellule en html
et si tu est encore plus intéressé tu va un peu plus loin en arrière dans mes sources ou je fait la même chose pour un range classique en supportant les fusions et en appliquant aussi un format specifique à out look lorsque l'on met des images dans les cellules etant donné que le css 3 et 4 ne fonctionne pas dans outlook car dans ce cas là les balise images dans le html sont des <shape> et non des "<img>"
 
Bonsoir Patrick,
Ok je note cela.
Pour l'instant j'ai la 1.07/1.08 dans les cartons. On ne va pas trop se disperser et j'ai aussi d'autres sujets PRO des KPI sur le RUP (registre du personnel pour être plus clair) à gérer en même temps.
On va déjà terminer ce qui est en cours. J'avais aussi LIBMAC 3.2 sur le feu que je viens de publier avec des évolutions majeures. J'attends sa publication. @+
 
Bonjour Patrick,
je suis en train de repartir de ta version postée en #22 et ça plante étrangement sur


c'est aussi ce que l'on retrouve dans ton post


la méthode setattribute existe bien dans la doc


Mais en attendant je me colle au debug 😉

 

Pièces jointes

  • 1746967633016.png
    5.1 KB · Affichages: 66
Dernière édition:
c'est passé avec cette correction d'où écart entre le contenu du fichier Excel posté en "#22 et ton code dans ce poste


PÔ Grave..... 😉
Quant à l'explication... je ne creuse pas pour le moment... mais je suis certain que tu l'as...
certainement nos versions d'excel qui gèrent cela différemment
c'est peut-être corrigé dans un post que j'aurai loupé... 😉
 
Bonjour @oguruma en effet c'est étonnant
il me semble que j'avais corrigé avec un "_" a la place de l'espace
Re... No Prb Tkt, là ça me va bien. Ne te tracasse pas trop "le ciboulot" surtout un dimanche 😉
La refonte est en cours.
Au niveau du code afin de ne pas se "fourvoyer" dans les versions je pars de celle que tu as posté en #22.
J'oublie les 1.07 et 1.08. Au besoin j'irai chercher les parties de codes que j'avais commencé....
On aboutira à une 2.0 en tenant compte au maximum de nos échanges. Ainsi la boucle sera bouclée.
 
re
oui j'avais corrigé je n'ai pas du envoyer le bon fichier
je me suis rendu compte aussi que dans cette version 1.7 j'avais supprimé ta version xml string
tu ne m'en veux pas j’espère 🤣
les 3 version s dont la 3 qui est piloté par le menu du bouton
VB:
'*************************************************************************************
'* exportToXML2, IndenterXMLCode, exportToHTML
'* Auteur : patricktoulon sur https://excel-downloads.com/
'* Tous mes remerciements pour sa collaboration et échanges de lignes de code
'* Ajout à cette version 1.03 le 01/05/2025
'*************************************************************************************
Sub exportToHTML( _
                 hFileName As String, _
                 Optional hReplace As Integer = True, _
                 Optional WhithHeader As Boolean = False, _
                 Optional WithTotal As Boolean = False)

    Dim vHeaders As Variant
    Dim i As Long
    Dim c As Long
    Dim iNbrLig As Long
    Dim iNbrCol As Integer
    Dim vColumnValues As Variant
    Dim table, TR, TD, TH, COLHTML, Tbody, COL
    Dim CdeHTML As String
    If pOTools.isFileExists(hFileName) Then
        If hReplace <> -1 Then
            Err.Raise _
      ERROR_MESSAGE, _
      ERROR_SOURCE, _
      ERROR_MSG & " : Le fichier " & hFileName & " existe déjà"
        End If
    End If
    Close
    vColumnValues = getTableCells
    iNbrLig = pDataBody.Rows.Count + 1
    iNbrCol = pDataBody.Columns.Count
    vHeaders = getHeaders()

    With CreateObject("htmlfile")
        Set table = .body.appendchild(.createelement("TABLE"))
        table.setattribute "Tableau", CStr(pNameTS)
        table.Style.bordercollapse = "collapse"
        table.Style.TextAlign = "center"
        For c = 0 To UBound(vHeaders)
            Set COL = table.appendchild(.createelement("COL"))
            COL.Style.Width = Round(pDataBody.Cells(1, c + 1).Width) & "pt"
        Next
        Set Tbody = table.appendchild(.createelement("TBODY"))
        Set TR = Tbody.appendchild(.createelement("TR"))
        If HasHeaderRow Then
            If WhithHeader Then
                For c = 0 To UBound(vHeaders)
                    Set TH = TR.appendchild(.createelement("TH"))
                    TH.innerhtml = CStr(vHeaders(c))
                    TH.Style.Border = "0.5pt solid black"
                Next
            End If
        End If
        For i = 2 To iNbrLig
            Set TR = Tbody.appendchild(.createelement("TR"))
            For c = 1 To iNbrCol
                Set TD = TR.appendchild(.createelement("TD"))
                TD.innerhtml = vColumnValues(i, c)
                TD.Style.Border = "0.5pt solid black"
            Next
        Next
        '-------------------------------------------------------
        If HasTotalRow Then
            If WithTotal Then
                Set TR = Tbody.appendchild(.createelement("TR"))
                TR.setattribute "Ligne_Total", ""
                For c = 1 To iNbrCol
                    Set TD = TR.appendchild(.createelement("TD"))
                    TD.innerhtml = "<b>" & pDataTotalBody.Cells(c) & "</B>"
                    TD.Style.Border = "0.5pt solid black"
                Next
            End If
        End If
        '-------------------------------------------------------

        'Debug.Print .body.innerhtml

        Dim oStream
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Charset = "utf-8"
        oStream.Open
        oStream.WriteText table.outerhtml
        oStream.SaveToFile hFileName, 2
    End With
End Sub

Sub exportToXML2(hFileName As String, Optional hReplace As Integer = True)
    'Auteur :
    Dim vHeaders As Variant
    Dim i As Long
    Dim c As Long
    Dim iNbrLig As Long
    Dim iNbrCol As Integer
    Dim vColumnValues As Variant
    Dim XmlDoc, Postprocc, ROOT, Record, elem, oStream

    If pOTools.isFileExists(hFileName) Then
        If hReplace <> -1 Then
            Err.Raise _
      ERROR_MESSAGE, _
      ERROR_SOURCE, _
      ERROR_MSG & " : Le fichier " & hFileName & " existe déjà"
        End If
    End If
    Close

    vColumnValues = getTableCells
    iNbrLig = pDataBody.Rows.Count + 1
    iNbrCol = pDataBody.Columns.Count
    vHeaders = getHeaders()
    Set XmlDoc = CreateObject("Microsoft.XMLDOM") 'CREATION D'UN DOMDOCUMENT XML
    With XmlDoc
        Set ROOT = .appendchild(.createelement(CStr(pNameTS))) 'CREATION DE L'ELEMENT ROOT
        'creation et intégration du post processing
        Set Postprocc = .createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""") 'creation de l'entete du processing
        .InsertBefore Postprocc, .ChildNodes.Item(0) 'insertion parametre processing
        'ajout des elements
        For i = 2 To iNbrLig
            Set Record = ROOT.appendchild(.createelement("RECORD_0" & i - 1))
            For c = 1 To iNbrCol
                Set elem = Record.appendchild(.createelement(pDataBody.Cells(1, c).Offset(-1)))
                elem.Text = pDataBody.Cells(i - 1, c)
            Next
        Next
        If HasTotalRow Then
            Set Record = ROOT.appendchild(.createelement("TOTAL"))
            For i = 1 To pDataTotalBody.Columns.Count
                Set elem = Record.appendchild(.createelement("cell"))
                elem.Text = pDataTotalBody.Cells(i).Value
            Next
        End If

        Set oStream = CreateObject("ADODB.Stream")
        oStream.Charset = "utf-8"
        oStream.Open
        oStream.WriteText IndenterXMLCode(XmlDoc.XML)
        oStream.SaveToFile hFileName, 2
    End With
End Sub

Sub exportToXML3( _
                 hFileName As String, _
                 Optional hReplace As Integer = True, _
                 Optional WhithHeader As Boolean = False, _
                 Optional WithTotal As Boolean = False)
    ' V1.06
    'Auteur :
    Dim vHeaders As Variant
    Dim i As Long
    Dim c As Long
    Dim color1 As Long
    Dim color2 As Long
    Dim Fnam
    Dim Fcolor
    Dim XmlDoc, Postprocc, ROOT, Record, elem, oStream
    Dim TableName, tableStyle, HeadCol, TableHeader, TableBody, properties, hasheader, ligne, cel, themecolor1, themecolor2, tss, fn, fc

    If pOTools.isFileExists(hFileName) Then
        If hReplace <> -1 Then
            Err.Raise _
      ERROR_MESSAGE, _
      ERROR_SOURCE, _
      ERROR_MSG & " : Le fichier " & hFileName & " existe déjà"
        End If
    End If
    Close
    Set tss = ThisWorkbook.TableStyles(pTable.tableStyle)

    color1 = tss.TableStyleElements(xlRowStripe1).Interior.Color
    color2 = tss.TableStyleElements(xlRowStripe2).Interior.Color
    If color2 = 0 Then color2 = vbWhite
    Fnam = ThisWorkbook.TableStyles(pTable.tableStyle).TableStyleElements(xlWholeTable).Font.Name
    If IsNull(Fnam) Then Fnam = Cells(Rows.Count, Columns.Count).Offset(-10, -10).Resize(10).Font.Name

    Fcolor = ThisWorkbook.TableStyles(pTable.tableStyle).TableStyleElements(xlWholeTable).Font.Name
    If IsNull(Fcolor) Then Fcolor = Cells(Rows.Count, Columns.Count).Offset(-10, -10).Resize(10).Font.Color

    vHeaders = getHeaders()
    Set XmlDoc = CreateObject("Microsoft.XMLDOM") 'CREATION D'UN DOMDOCUMENT XML
    With XmlDoc
        Set ROOT = .appendchild(.createelement("table")) 'CREATION DE L'ELEMENT ROOT Tag(table)

        Set properties = ROOT.appendchild(.createelement("properties")) 'creation d'une balise propertiesqui contiendra les propreties que l'on veux

        'creation et intégration du post processing
        Set Postprocc = .createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""") 'creation de l'entete du processing
        .InsertBefore Postprocc, .ChildNodes.Item(0) 'insertion parametre processing

        Set TableName = properties.appendchild(.createelement("Name")) 'balise table name contient le nom du listobject
        TableName.Text = CStr(pNameTS)

        Set tableStyle = properties.appendchild(.createelement("tablestyle")) 'balise tablestyle (contient le style du tableau
        tableStyle.Text = CStr(pTable.tableStyle)

        Set hasheader = properties.appendchild(.createelement("hasheader")) 'balise hasheader (contient 1 ou 0) selon si le tableau a un header ou pas
        hasheader.Text = Abs(pTable.ShowHeaders)

        Set themecolor1 = properties.appendchild(.createelement("themecolor1")) 'balise themecolor1 (contient la couleur 1 du style du tableau)
        themecolor1.Text = color1

        Set themecolor2 = properties.appendchild(.createelement("themecolor2")) 'balise themecolor2 (contient la couleur 2 du style du tableau)
        themecolor2.Text = color2

        Set fn = properties.appendchild(.createelement("Font_name")) 'balise themecolor2 (contient la couleur 2 du style du tableau)
        fn.Text = Fnam

        Set fc = properties.appendchild(.createelement("Font_Color")) 'balise themecolor2 (contient la couleur 2 du style du tableau)
        fc.Text = Fcolor

        'ecriture du header
        If pTable.ShowHeaders Then ' si le tableau a un header
            If WhithHeader Then
                Set TableHeader = ROOT.appendchild(.createelement("headers")) 'creation de la balise header
                'ajout des balises headcol correspontes au cellule du header du tableau
                For i = LBound(vHeaders) To UBound(vHeaders)
                    Set HeadCol = TableHeader.appendchild(.createelement("headcol"))
                    HeadCol.Text = vHeaders(i)
                    HeadCol.setattribute "index", i + 1 'attribut index de colonne
                    HeadCol.setattribute "Width", pDataBody.Cells(1, i + 1).Width 'attribut largeur de colonne
                    HeadCol.setattribute "height", pDataBody.Cells(1, i + 1).Height 'attribut hauteur de cellule header
                Next
            End If
        End If

        'ecriture de la table(body)
        Set TableBody = ROOT.appendchild(.createelement("tablebody"))

        For i = 1 To pDataBody.Rows.Count
            Set ligne = ROOT.appendchild(.createelement("row"))
            ligne.setattribute "index", i
            ligne.setattribute "height", pDataBody.Cells(1, i + 1).Height 'attribut hauteur de ligne

            For c = 1 To pDataBody.Columns.Count
                Set cel = ligne.appendchild(.createelement("cell"))
                cel.Text = pDataBody.Cells(i, c)
                cel.setattribute "bold", Abs(pDataBody.Cells(i, c).Font.Bold)
                'on met les attributs Font(name et color) uniquement si elles sont différentes du général
                If pDataBody.Cells(i, c).Font.Name <> Fnam Then cel.setattribute "FontName", pDataBody.Cells(i, c).Font.Name
                If pDataBody.Cells(i, c).DisplayFormat.Font.Color <> Fcolor Then cel.setattribute "FontColor", pDataBody.Cells(i, c).DisplayFormat.Font.Color

                Dim expectedColor As Long
                expectedColor = IIf(i Mod 2 = 1, color1, color2)
                If pDataBody.Cells(i, c).DisplayFormat.Interior.Color <> expectedColor Then
                    cel.setattribute "interiorcolor", pDataBody.Cells(i, c).Interior.Color
                End If
            Next
        Next

        If HasTotalRow Then
            If WithTotal Then
                Set ligne = ROOT.appendchild(.createelement("row"))
                ligne.setattribute "ligne_Total", ""
                ligne.setattribute "height", pDataTotalBody.Cells(1).Height 'attribut hauteur de ligne
                For i = 1 To pDataTotalBody.Columns.Count
                    Set cel = ligne.appendchild(.createelement("cell"))
                    cel.Text = pDataTotalBody.Cells(i)
                    cel.setattribute "bold", 1
                Next
            End If
        End If

        'écriture du fichier
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Charset = "utf-8"
        oStream.Open
        oStream.WriteText IndenterXMLCode(XmlDoc.XML)
        oStream.SaveToFile hFileName, 2
    End With
End Sub

'*************************************************************************************
'version 2 en memoire
'Fonction basique minimale pour indenter un code xml(issue de creatorribbonx (collection fonction perso ))
'* Auteur : patricktoulon sur https://excel-downloads.com/
'*************************************************************************************
Public Function IndenterXMLCode(ByVal vDomOrString As Variant) As String
    Dim XMLWriter As Object ' MSXML2.MXXMLWriter
    On Error GoTo QH
    Set XMLWriter = CreateObject("MSXML2.MXXMLWriter")
    XMLWriter.indent = True 'ajoute l'attribut indent
    With CreateObject("MSXML2.SAXXMLReader")
        Set .contentHandler = XMLWriter
        .Parse vDomOrString
    End With
    IndenterXMLCode = Replace(Replace(XMLWriter.output, "UTF-16", "UTF-8"), "standalone=""no""", "")
    Exit Function
QH:
End Function

'*************************************************************************
'* Ajout patricktoulon à propos des exports xml e html
'*************************************************************************
 
"tu ne m'en veux pas j’espère " => 😀 Lol no tkt
tu me parlais d'une 1.07 de ton côté, j'en ai aussi une....
bref afin de tout regrouper en une seule fois.
l'as-tu posté ? je ne la vois pas ou zappé ?
Bonne fin de dimanche
 
"tu ne m'en veux pas j’espère " => 😀 Lol no tkt
tu me parlais d'une 1.07 de ton côté, j'en ai aussi une....
l'as-tu posté ? je ne la vois pas ou zappé
 
Bonjour @patrick, le Forum,

Les modifications et les adaptations prennent fin.
Ce qu'il faut retenir et la V2.0 sera publiée ainsi :
  • la prise en compte de la ligne titre de colonnes (headers dans notre jargon) et de la ligne total sera effectuée au moment de la procédure INSTANTIATE. J'ai abonné le passage de ces paramètres dans les modules d'export. Autant les centraliser dans une seule.
  • Si ces options ne sont pas retenues au moment de l'initialisation il sera toujours possible de modifier ces paramètres par des PROPERTY LET qui iront modifier l'état des booléens
Code:
Sub Instantiate(hTB As String, _
Optional hWk As String = "§_§ACTIVESHEET§_§", _
Optional hIncludeTotal As Boolean = False, _
Optional hIncludeHeader As Boolean = False)

VB:
Property Let IncludeLineTotal(hBool As Boolean)
    pIncludeTotal = hBool
    pHasTotalRow = pWk.ListObjects(pTB).ShowTotals = True
    If pHasTotalRow Then
        Set pDataTotalBody = pWk.ListObjects(pTB).TotalsRowRange
    End If
End Property

Property Let IncludeLineHeader(hBool As Boolean)
    pIncludeHeader = hBool
End Property

  • Les modules de tests ont été dispatchés par type d'export - ça permet de les retrouver plus facilement. J'ai abandonné les boutons... il faudra aller dans VBE pour lancer les procédures à la "mano" - (ça reste un outil et non une application clef en main) - par cette manière les futurs utilisateurs verront comment elles fonctionnent
  • Les procédures d'instanciations pour les tests ont été regroupées dans un module GLOBAL - ça permet de les aérer
  • Les fichiers exportés sont créés dans des répertoires spécifiques par type d'export créé automatiquement - ça évite de mettre la pagaille dans le répertoire qui héberge le classeur de la classe


VB:
Option Explicit

Public Const TBL_TS = "TBL_RAYON_DEMO"
Public Const TBL_TS_02 = "TBL_RAYON_DEMO_02"
Public Const TBL_TS_03 = "RQTBL_RAYON_DEMO_03"
Public Const TBL_TS_04 = "TBL_RAYON_DEMO_03"
Public Const FEUILLE_TS = "DEMO_CLASS_CLS_TS"
Public Const FEUILLE_TS_02 = "DEMO_CLASS_CLS_TS_02"
Public Const FEUILLE_TS_03 = "RQ_RAYON_DEMO_03"
Public Const FEUILLE_TS_04 = "DEMO_CLASS_CLS_TS_03"

Public oTS As CLS_TS

Public vHeaders As Variant
Public vColumnValues As Variant
Public vValue As Variant
Public vVariant As Variant

Public oListRows As ListRows
Public oRow As ListRow
Public oListColumns As ListColumns
Public oColumn As ListColumn
 
Sub INSTANCIATE()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS, FEUILLE_TS)
End Sub

Sub INSTANCIATE_02()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02)
End Sub

Sub INSTANCIATE_021()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02, False, False)
End Sub

Sub INSTANCIATE_022()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02, True, False)
End Sub

Sub INSTANCIATE_023()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02, True, True)
End Sub

Sub INSTANCIATE_024()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02, False, True)
End Sub

Sub INSTANCIATE_03()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_03, FEUILLE_TS_03)
End Sub

Sub INSTANCIATE_04()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_04, FEUILLE_TS_04)
End Sub

  • Dans les Instanciations 21, 22, 23, 24 on voit donc le passage de booléens permettant de retenir ou pas la ligne total ou la ligne titre
  • Exemple de modification après instanciation
VB:
    oTS.IncludeLineHeader = True
    oTS.IncludeLineTotal = False
  • Donc on peut toujours revenir sur les choix pris au moment de l'instanciation
  • L'export XML/V3 est totalement personnalisable à propos de la création des Items et propriétés avec des valeurs par défaut en cas d'omission au moment de son appel
VB:
Sub exportToXML3(hFileName As String, Optional hReplace As Integer = True, _
Optional hName As String = "Name", _
Optional hHasHeader As String = "hasheader", _
Optional hHeaders As String = "headers", _
Optional hHeadCol As String = "headcol", _
Optional hRow As String = "row", _
Optional hCell As String = "cell")

exemple
VB:
Sub exportToXML_035()
Call createFolderXML
Call INSTANCIATE_024
    Call oTS.exportToXML3(ThisWorkbook.Path & "\TEST_XML\TestExportToXML_035.xml", True, "Tableau Des Ventes", "ATitre", "TitresColonnes", "NomColonne", "Enregistrement", "Champ")
End Sub

Voili voilà en gros les transformations majeures. Je suis parti de ta livraison #22 que j'ai ensuite adapté tout en conservant ce que tu as apporté. Et une nouvelle fois, un super merci pour cette collaboration de coding.

Je continue à mettre tout cela sur le banc de tests avant de publier une V2.0 qui sera accompagnée certainement d'un "manifeste" de toutes les fonctions, procédures et propriétés que comporte cette classe. Maintenant que j'ai mon outil LIBMAC 3.2 (en attente de publication) ça va être "jeu d'enfant".
Bonne journée.
 
la prise en compte de la ligne titre de colonnes (headers dans notre jargon) et de la ligne total sera effectuée au moment de la procédure INSTANTIATE.
ben c’était déjà le cas
maintenant si tu parle du pdatabody qui changerait éventuellement dans le instanciate en fonction des choix c'est une belle erreur de faire ça
pourquoi:
et bien par ce que ca te bloque de toute évolution puisque tu travaillera avec un seul range
la méthode que j'ai employé c'est 4 variables global module elle sont bien instruite dans le instantiate mais c'est tout

on a le hasheaderrow booleen
le hastotalrow booleen
le pdataheader range pour le header
ptotalbody range pour la ligne total

ses 4 variables sont disponibles dans tout les fonctions du module et je m'en sert dans les 3 fonctions xml et la html
c'est pas bon de tout centrer dans une seule variable
mais bon c'est ton bébé j'ai juste apporté un peu de technique du DOM
 
J'ai des dév sous le coude pour le boulot... je compte l'utiliser. Je verrai effectivement... selon... disons que pour l'instant dans les phases de tests ça répond aux besoins.... et c'est pour cela que j'ai mis les property get.... après à chacun sa "lorgnette" des choses 🙂 - mais je note ça dans un coin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…