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 !

oguruma

XLDnaute Impliqué
Bonjour le Forum,
cette livraison fait suite à cette discussion ICI
Nouvelle version d'un Export XML

J'ai tenu compte des suggestions de P. TOULON en ajoutant une option dans l'instanciation : le fait de retenir ou pas la ligne total dans le databody... car pas certain que l'on en ait toujours besoin.... ça reste donc au choix
VB:
    If hTotalBody Then
        phasTotalRow = wk.ListObjects(hTB).ShowTotals = True
        If phasTotalRow Then
            Set pDataBody = pTable.DataBodyRange.Resize(pTable.DataBodyRange.Rows.Count + 1)
        Else
            Set pDataBody = pTable.DataBodyRange
        End If
    Else
        Set pDataBody = pTable.DataBodyRange
    End If

voir le code de Test de classe... avec de nombreux cas testés... je n'ai pas mis les boutons... pas trop le courrr...ge
Pour conclure sur sujet... ça reste ensuite à la liberté du développeur Excel qui reprendra ce code pour l'adapter ou le corriger selon ses besoins...
ça n'est pas une livraison de voiture clef en main avec l'extension de garantie à vie du constructeur... 🙂 😀
cet ensemble de classes va déjà assez loin avec une très bonne contribution d'un membre chevronné en VBA du Forum 😉 🙂 merci
 

Pièces jointes

Dernière édition:
Bonjour le Forum,
cette livraison fait suite à cette discussion ICI
Nouvelle version d'un Export XML
Hello,
elle est où cette version 1.06 ? 🤔

et pour le Xml, voici un exemple de ce qu'on récupère si on utilise le presse-papier après un copy d'une plage :
XML:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s16" ss:Name="Normal 2">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s18" ss:Parent="s16">
   <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="11" ss:Color="#FF0000"/>
  </Style>
  <Style ss:ID="s19" ss:Parent="s16">
   <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s20" ss:Parent="s16">
   <Interior ss:Color="#FCE4D6" ss:Pattern="Solid"/>
  </Style>
 </Styles>
 <Names>
  <NamedRange ss:Name="_xleta.T" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.Depart" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.Dt" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.TblABS" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.TblPRE" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
 </Names>
 <Worksheet ss:Name="Export T.S">
  <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="11" ss:StyleID="s16"
   ss:DefaultColumnWidth="62.400000000000006" ss:DefaultRowHeight="13.8">
   <Column ss:Index="3" ss:StyleID="s16" ss:AutoFitWidth="0" ss:Width="78"/>
   <Column ss:Index="7" ss:StyleID="s16" ss:AutoFitWidth="0" ss:Width="123.6"/>
   <Row>
    <Cell><Data ss:Type="String">PRODUIT</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_1</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_2</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_3</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_4</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_5</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_6</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_1</Data></Cell>
    <Cell><Data ss:Type="Number">684</Data></Cell>
    <Cell><Data ss:Type="Number">665</Data></Cell>
    <Cell><Data ss:Type="Number">361</Data></Cell>
    <Cell><Data ss:Type="Number">341</Data></Cell>
    <Cell><Data ss:Type="Number">578</Data></Cell>
    <Cell ss:StyleID="s18"><Data ss:Type="Number">723</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_2</Data></Cell>
    <Cell><Data ss:Type="Number">194</Data></Cell>
    <Cell><Data ss:Type="Number">498</Data></Cell>
    <Cell><Data ss:Type="Number">979</Data></Cell>
    <Cell><Data ss:Type="Number">869</Data></Cell>
    <Cell><Data ss:Type="Number">609</Data></Cell>
    <Cell><Data ss:Type="Number">331</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_3</Data></Cell>
    <Cell><Data ss:Type="Number">792</Data></Cell>
    <Cell><Data ss:Type="Number">252</Data></Cell>
    <Cell ss:StyleID="s18"><Data ss:Type="Number">293</Data></Cell>
    <Cell><Data ss:Type="Number">338</Data></Cell>
    <Cell><Data ss:Type="Number">334</Data></Cell>
    <Cell><Data ss:Type="Number">212</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_4</Data></Cell>
    <Cell ss:StyleID="s19"><Data ss:Type="Number">366</Data></Cell>
    <Cell><Data ss:Type="Number">296</Data></Cell>
    <Cell><Data ss:Type="Number">912</Data></Cell>
    <Cell><Data ss:Type="Number">908</Data></Cell>
    <Cell><Data ss:Type="Number">999</Data></Cell>
    <Cell><Data ss:Type="Number">171</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_5</Data></Cell>
    <Cell><Data ss:Type="Number">326</Data></Cell>
    <Cell><Data ss:Type="Number">660</Data></Cell>
    <Cell><Data ss:Type="Number">192</Data></Cell>
    <Cell><Data ss:Type="Number">730</Data></Cell>
    <Cell><Data ss:Type="Number">403</Data></Cell>
    <Cell><Data ss:Type="Number">581</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_6</Data></Cell>
    <Cell><Data ss:Type="Number">715</Data></Cell>
    <Cell><Data ss:Type="Number">146</Data></Cell>
    <Cell><Data ss:Type="Number">939</Data></Cell>
    <Cell><Data ss:Type="Number">619</Data></Cell>
    <Cell><Data ss:Type="Number">755</Data></Cell>
    <Cell ss:StyleID="s20"><Data ss:Type="Number">142</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_7</Data></Cell>
    <Cell><Data ss:Type="Number">774</Data></Cell>
    <Cell><Data ss:Type="Number">919</Data></Cell>
    <Cell><Data ss:Type="Number">127</Data></Cell>
    <Cell><Data ss:Type="Number">314</Data></Cell>
    <Cell><Data ss:Type="Number">579</Data></Cell>
    <Cell><Data ss:Type="Number">649</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_8</Data></Cell>
    <Cell><Data ss:Type="Number">414</Data></Cell>
    <Cell><Data ss:Type="Number">952</Data></Cell>
    <Cell><Data ss:Type="Number">671</Data></Cell>
    <Cell><Data ss:Type="Number">875</Data></Cell>
    <Cell><Data ss:Type="Number">595</Data></Cell>
    <Cell><Data ss:Type="Number">742</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_9</Data></Cell>
    <Cell><Data ss:Type="Number">363</Data></Cell>
    <Cell><Data ss:Type="Number">277</Data></Cell>
    <Cell><Data ss:Type="Number">895</Data></Cell>
    <Cell><Data ss:Type="Number">714</Data></Cell>
    <Cell><Data ss:Type="Number">703</Data></Cell>
    <Cell><Data ss:Type="Number">271</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_10</Data></Cell>
    <Cell><Data ss:Type="Number">888</Data></Cell>
    <Cell><Data ss:Type="Number">774</Data></Cell>
    <Cell><Data ss:Type="Number">903</Data></Cell>
    <Cell><Data ss:Type="Number">716</Data></Cell>
    <Cell><Data ss:Type="Number">346</Data></Cell>
    <Cell><Data ss:Type="Number">617</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>

TS_Export.png


Ami calmant, J.P
 
Dernière édition:
Hello,
elle est où cette version 1.06 ? 🤔

et pour le Xml, voici un exemple de ce qu'on récupère si on utilise le presse-papier après un copy d'une plage :
XML:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s16" ss:Name="Normal 2">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s18" ss:Parent="s16">
   <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="11" ss:Color="#FF0000"/>
  </Style>
  <Style ss:ID="s19" ss:Parent="s16">
   <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s20" ss:Parent="s16">
   <Interior ss:Color="#FCE4D6" ss:Pattern="Solid"/>
  </Style>
 </Styles>
 <Names>
  <NamedRange ss:Name="_xleta.T" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.Depart" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.Dt" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.TblABS" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
  <NamedRange ss:Name="_xlpm.TblPRE" ss:RefersTo="=#NAME?" ss:Hidden="1"/>
 </Names>
 <Worksheet ss:Name="Export T.S">
  <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="11" ss:StyleID="s16"
   ss:DefaultColumnWidth="62.400000000000006" ss:DefaultRowHeight="13.8">
   <Column ss:Index="3" ss:StyleID="s16" ss:AutoFitWidth="0" ss:Width="78"/>
   <Column ss:Index="7" ss:StyleID="s16" ss:AutoFitWidth="0" ss:Width="123.6"/>
   <Row>
    <Cell><Data ss:Type="String">PRODUIT</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_1</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_2</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_3</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_4</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_5</Data></Cell>
    <Cell><Data ss:Type="String">RAYON_6</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_1</Data></Cell>
    <Cell><Data ss:Type="Number">684</Data></Cell>
    <Cell><Data ss:Type="Number">665</Data></Cell>
    <Cell><Data ss:Type="Number">361</Data></Cell>
    <Cell><Data ss:Type="Number">341</Data></Cell>
    <Cell><Data ss:Type="Number">578</Data></Cell>
    <Cell ss:StyleID="s18"><Data ss:Type="Number">723</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_2</Data></Cell>
    <Cell><Data ss:Type="Number">194</Data></Cell>
    <Cell><Data ss:Type="Number">498</Data></Cell>
    <Cell><Data ss:Type="Number">979</Data></Cell>
    <Cell><Data ss:Type="Number">869</Data></Cell>
    <Cell><Data ss:Type="Number">609</Data></Cell>
    <Cell><Data ss:Type="Number">331</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_3</Data></Cell>
    <Cell><Data ss:Type="Number">792</Data></Cell>
    <Cell><Data ss:Type="Number">252</Data></Cell>
    <Cell ss:StyleID="s18"><Data ss:Type="Number">293</Data></Cell>
    <Cell><Data ss:Type="Number">338</Data></Cell>
    <Cell><Data ss:Type="Number">334</Data></Cell>
    <Cell><Data ss:Type="Number">212</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_4</Data></Cell>
    <Cell ss:StyleID="s19"><Data ss:Type="Number">366</Data></Cell>
    <Cell><Data ss:Type="Number">296</Data></Cell>
    <Cell><Data ss:Type="Number">912</Data></Cell>
    <Cell><Data ss:Type="Number">908</Data></Cell>
    <Cell><Data ss:Type="Number">999</Data></Cell>
    <Cell><Data ss:Type="Number">171</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_5</Data></Cell>
    <Cell><Data ss:Type="Number">326</Data></Cell>
    <Cell><Data ss:Type="Number">660</Data></Cell>
    <Cell><Data ss:Type="Number">192</Data></Cell>
    <Cell><Data ss:Type="Number">730</Data></Cell>
    <Cell><Data ss:Type="Number">403</Data></Cell>
    <Cell><Data ss:Type="Number">581</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_6</Data></Cell>
    <Cell><Data ss:Type="Number">715</Data></Cell>
    <Cell><Data ss:Type="Number">146</Data></Cell>
    <Cell><Data ss:Type="Number">939</Data></Cell>
    <Cell><Data ss:Type="Number">619</Data></Cell>
    <Cell><Data ss:Type="Number">755</Data></Cell>
    <Cell ss:StyleID="s20"><Data ss:Type="Number">142</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_7</Data></Cell>
    <Cell><Data ss:Type="Number">774</Data></Cell>
    <Cell><Data ss:Type="Number">919</Data></Cell>
    <Cell><Data ss:Type="Number">127</Data></Cell>
    <Cell><Data ss:Type="Number">314</Data></Cell>
    <Cell><Data ss:Type="Number">579</Data></Cell>
    <Cell><Data ss:Type="Number">649</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_8</Data></Cell>
    <Cell><Data ss:Type="Number">414</Data></Cell>
    <Cell><Data ss:Type="Number">952</Data></Cell>
    <Cell><Data ss:Type="Number">671</Data></Cell>
    <Cell><Data ss:Type="Number">875</Data></Cell>
    <Cell><Data ss:Type="Number">595</Data></Cell>
    <Cell><Data ss:Type="Number">742</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_9</Data></Cell>
    <Cell><Data ss:Type="Number">363</Data></Cell>
    <Cell><Data ss:Type="Number">277</Data></Cell>
    <Cell><Data ss:Type="Number">895</Data></Cell>
    <Cell><Data ss:Type="Number">714</Data></Cell>
    <Cell><Data ss:Type="Number">703</Data></Cell>
    <Cell><Data ss:Type="Number">271</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Prod_10</Data></Cell>
    <Cell><Data ss:Type="Number">888</Data></Cell>
    <Cell><Data ss:Type="Number">774</Data></Cell>
    <Cell><Data ss:Type="Number">903</Data></Cell>
    <Cell><Data ss:Type="Number">716</Data></Cell>
    <Cell><Data ss:Type="Number">346</Data></Cell>
    <Cell><Data ss:Type="Number">617</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>

Regarde la pièce jointe 1217428

Ami calmant, J.P
C'est fait oubli de joindre le fichier
mais juste un truc... c'est livré en l'état !
et merci à Patrick TOULON pour son code
après.... libre à chacun de faire évoluer ce qui est livré !
on ne va pas refaire l'histoire à chaque fois !!! - CQFD !
 
re@oguruma
non t’inquiet je ne l'ai pas pris pour moi
cela dit c'est dommage @jurassic pork fait parti des rares personne que j'apprecie car il est plutôt pertinent
et c'est un vrai cochon truffier de pépite vbaistique
juste pour info la version 1.5 et 1.6 me plante une erreur c'est pour ca que j'ai continué a travailler sur la 1.1 et 1.3
1746440798609.png
 
re @oguruma
je viens de me rendre compte que tu a oublié un truc moult important
le truc c'est la ligne Total qui n'est pas prise en compte dans le databodyrange
donc tu ne la récupère pas
donc dans la version 1.01 j'ai fait ça

en haut j'ai ajouté une variable dans la section listobject
VB:
Private pListRows As ListRows
Private pListColumns As ListColumns
Private pRow As ListRow
Private pColumn As ListColumn
Private hasTotalRow As Boolean'ça manquait!!!!!

ensuite dans le instanciate
Code:
 hasTotalRow = wk.ListObjects(hTB).ShowTotals = True
    If hasTotalRow Then
        Set pDataBody = pTable.DataBodyRange.Resize(pTable.DataBodyRange.Rows.Count + 1)
    Else
        Set pDataBody = pTable.DataBodyRange
    End If

ainsi si on a la ligne total elle est prise en compte dans le databody
et donc on la retrouve dans le xml
1746441994553.png



à la fin on récupère bien la ligne total
1746442176016.png
 
re @oguruma
je viens de me rendre compte que tu a oublié un truc moult important
le truc c'est la ligne Total qui n'est pas prise en compte dans le databodyrange
donc tu ne la récupère pas
donc dans la version 1.01 j'ai fait ça

en haut j'ai ajouté une variable dans la section listobject
VB:
Private pListRows As ListRows
Private pListColumns As ListColumns
Private pRow As ListRow
Private pColumn As ListColumn
Private hasTotalRow As Boolean'ça manquait!!!!!

ensuite dans le instanciate
Code:
 hasTotalRow = wk.ListObjects(hTB).ShowTotals = True
    If hasTotalRow Then
        Set pDataBody = pTable.DataBodyRange.Resize(pTable.DataBodyRange.Rows.Count + 1)
    Else
        Set pDataBody = pTable.DataBodyRange
    End If

ainsi si on a la ligne total elle est prise en compte dans le databody
et donc on la retrouve dans le xml
Regarde la pièce jointe 1217441


à la fin on récupère bien la ligne total
Regarde la pièce jointe 1217443
Re@hello,
je fais point sur tout cela... possible que je sois passer au travers.... 🙂 en général j'active la compile sous vbe pour tester que tout est bien en place.... étrange.... bon j'espère que ce n'est pas encore mon O365 qui déconnnnne 🙁
 
re@oguruma
non t’inquiet je ne l'ai pas pris pour moi
cela dit c'est dommage @jurassic pork fait parti des rares personne que j'apprecie car il est plutôt pertinent
et c'est un vrai cochon truffier de pépite vbaistique
juste pour info la version 1.5 et 1.6 me plante une erreur c'est pour ca que j'ai continué a travailler sur la 1.1 et 1.3
Regarde la pièce jointe 1217439
Il ne voudrait pas de
1746448380530.png

pourtant chez moi il ne bronche pas.
Est-ce VBE te le propose quand tu fais une Ctrl+Space après le As ?
Piste : le fichier devait être ouvert quand je l'ai téléchargé... et je sais pour l'avoir connu sur sharepoint.. parfois le fichier est corrompu à l'arrivée...
 
re@oguruma
non t’inquiet je ne l'ai pas pris pour moi
cela dit c'est dommage @jurassic pork fait parti des rares personne que j'apprecie car il est plutôt pertinent
et c'est un vrai cochon truffier de pépite vbaistique
juste pour info la version 1.5 et 1.6 me plante une erreur c'est pour ca que j'ai continué a travailler sur la 1.1 et 1.3
Regarde la pièce jointe 1217439
Je mets tout ça au clair....

Function isExistsWbWorkbookQuery(hWb As Workbook, hName As String) As Boolean

isExistsWbWorkbookQuery = False
For Each oWbQuery In hWb.Queries
If hName = oWbQuery.Name Then
isExistsWbWorkbookQuery = True
Exit For
End If
Next
End Function

voici en attendant la nouvelle version, j'en ferai autant dans la 1.05
 
patricktoulon utilise la plupart du temps Excel 2013 et :
patricktoulon utilise la plupart du temps Excel 2013 et :
Re...Jurassic, en effet, d'ailleurs c'est à partir de cette version que je me suis vraiment intéressé sur pwq... car auparavant c'est encore de l'artisanat où il fallait l'installer en tant qu'AddOn et toutes ses suprises... j'avais donc mis ça de côté 🙂
je comprends bcp mieux désormais 😉
Bah alors Patrick ? on est en retard dans les maj d'Excel ? 😀
 
bien vu @jurassic pork

@oguruma
j'ai donc corrigé cela dans la version 1.6 et j'ai ajouté la maitrise et la manipulation de la ligne TOTAL
pour commencer
j'ai ajouter les variables qu'il faut (façon oguruma)dans les paragraphe concernés de tes variable
Private pDataTotalBody As Range'le range de la ligne total
et
Private HasTotalRow As Boolean 'flag du showtotals

ensuite dans le Instantiate
VB:
 HasTotalRow = wk.ListObjects(hTB).ShowTotals = True
    If HasTotalRow Then Set pDataTotalBody = wk.ListObjects(hTB).TotalsRowRange

ensuite j'ai modifié la xml3
j'ajoute à la fin
Code:
 If HasTotalRow Then
            Set ligne = ROOT.appendchild(.createelement("row"))
            ligne.setattribute "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
et voila maintenant tu gère la ligne total indépendamment du reste
resultat
1746451948939.png

bien entendu j'ai fait les modif sur la xml (1,2,3)
et voila le fichier 1.06 modifié
je te laisse le faire pour le json et csv
pour le coup tu a moins de travaille a faire la 😉
 

Pièces jointes

- 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
Retour