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 - V2.0 + 2.01 - exports CSV, XML, XML UTF-8, JSON, HTML, PDF, JPG, JPEG, BMP, EXCEL

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,

Si vous avez suivi cette discussion et les précédentes ci-joint dans ce post la V2.0. Je n'ai pas été le seul dans les derniers débats 😉.
J'ai pris volontairement certaines orientations au niveau l'instanciation certes discutables selon les volontés de chacun.
En fonction de l'aboutissement de celles-ci une V2.1 pourrait peut-être voir le jour.
Je précise cependant que c'est un outil et non une application livrée avec son contrat de garantie. c'est "as is" 🙂
Libre à chacun de reprendre le code et de l'adapter selon ses besoins. Le code est "OpenSource".
Les précédentes versions offraient un onglet avec des boutons exports. Etant donné la multiplicité des cas de tests les boutons ont été abandonnés.
Je vous invite à tester les exports via VBE.
Les modules de tests concernant les exports sont :

Les instanciations sont effectuées dans module

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

C'est donc au moment de l'initialisation de l'instanciation que l'on décide si on tient compte de la ligne total ou de la ligne titre pour les exports.
VB:
Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02, [B]True, True)[/B]

Les deux derniers paramètres (true, true)
1er : ligne total
2ème : ligne titre

On peut toutefois intervenir sur ces derniers pour modifier ce choix après instanciation via par exemple
VB:
    oTS.IncludeLineHeader = True ou False
    oTS.IncludeLineTotal = True ou False

puis lancer l'export que l'on souhaite.


Un répertoire spécifique à chaque export est crée automatiquement dans le dossier du classeur qui héberge la classe. Les fichiers résultats y sont déposés.
On évite de mettre la pagaille dans le dossier du classeur.


exemple pour chaque type de tests

VB:
Sub createFolderCSV()
    On Error Resume Next
    MkDir ThisWorkbook.Path & "\TEST_CSV"
End Sub

Sub exportToCSV_01()
Call createFolderCSV
Call INSTANCIATE_02
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_01.csv", , False)
End Sub

Enfin vous trouverez joint dans ce post un manifeste des différents modules.
 

Pièces jointes

Dernière édition:
Bonsoir le Forum,
Pour compléter la V2.0 postée hier. Petite variation dans l'initialisation de l'instanciation. Cela fait suite à une discussion à ce propos.
Il n'y a plus de passage paramètres pour indiquer si on embarque ou pas la ligne titre ou la ligne total.
Elles le sont automatiquement. Bien entendu pour la ligne total si elle existe.
VB:
Sub Instantiate(hTB As String, _
Optional hWk As String = "§_§ACTIVESHEET§_§")

    ' Instanciation nécessaire afin de capter les éléments du tableau à traiter
    '--------------------------------------------------------------------------

    Dim wk As Worksheet
    If hWk = "§_§ACTIVESHEET§_§" Then
        Set wk = ActiveSheet
    Else
        If Not pOTools.wkExist(pWb_MACRO, hWk) Then
            Err.Raise _
      ERROR_MESSAGE, _
      ERROR_SOURCE, _
      ERROR_MSG & " : La feuille " & hWk & " est inconnue"
        Else
            Set wk = pWb_MACRO.Worksheets(hWk)
        End If
    End If

    ' On va vérifier sa présence pour ne pas planter
    '------------------------------------------------
    If Not pOTools.exitsTS(hTB) Then
        Err.Raise _
      ERROR_MESSAGE, _
      ERROR_SOURCE, _
      ERROR_MSG & " : Le tableau " & hTB & " est inconnu"
    End If

    ' Initialisation des accès aux données du tableau
    '------------------------------------------------
    Set pTable = wk.ListObjects(hTB)
    Set pRange = Range(hTB & "[#All]") ' V1.05 ça manquait, prévu mais non initialisé
   
    ' On va gérer les lignes titre et total
    '--------------------------------------
    pHasTotalRow = False
    pIncludeTotal = False
    pIncludeHeader = False
    Set pDataTotalBody = Nothing
   
    ' Gestion de la ligne total
    '--------------------------
    pIncludeTotal = True  ' Par défaut on souhaite inclure la ligne total dans les exports
    pHasTotalRow = wk.ListObjects(hTB).ShowTotals = True ' MAIS :=> On vérifie si cette ligne total existe réellement !
    If pHasTotalRow Then
        Set pDataTotalBody = wk.ListObjects(hTB).TotalsRowRange ' Dans ce cas OUI on la récupère
    End If

    ' Gestion de la ligne titre des colonnes
    '---------------------------------------
    pIncludeHeader = True ' Par défaut on souhaite inclure la ligne titre de colonnes dans les exports

Exemples pour un export CSV

VB:
Option Explicit

Sub createFolderCSV()
    On Error Resume Next
    MkDir ThisWorkbook.Path & "\TEST_CSV"
End Sub

Sub exportToCSV_01()
Call createFolderCSV
Call INSTANCIATE_02
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_01.csv", , False)
End Sub

Sub exportToCSV_02()
Call createFolderCSV
Call INSTANCIATE_02
    oTS.IncludeLineHeader = True
    oTS.IncludeLineTotal = True
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_02.csv", Chr(9), True)
End Sub

Sub exportToCSV_03()
Call createFolderCSV
Call INSTANCIATE_02
    oTS.IncludeLineHeader = True
    oTS.IncludeLineTotal = False
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_03.csv", Chr(9), True)
End Sub

Sub exportToCSV_04()
Call createFolderCSV
Call INSTANCIATE_02
    oTS.IncludeLineHeader = False
    oTS.IncludeLineTotal = True
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_04.csv", Chr(9), True)
End Sub

Sub exportToCSV_05()
Call createFolderCSV
Call INSTANCIATE_02
    oTS.IncludeLineHeader = False
    oTS.IncludeLineTotal = False
    Call oTS.exportToCSV(ThisWorkbook.Path & "\TEST_CSV\TestExportToCsv01_05.csv", Chr(9), True)
End Sub

Pour changer les options par défaut au moment de l'initialisation de l'instanciation on dispose toujours des deux "inverseurs" que l'on peut actionner avant d'appeler la fonction export

VB:
    oTS.IncludeLineHeader = True

    oTS.IncludeLineTotal = False

Vous avez le choix désormais entre ces deux versions
- soit par passage de paramètres (par défaut elles ne sont pas prises en compte) au moment de l'instanciation (v2.0) et avec toujours la possibilité de jongler avec les l'inverseurs
- soit sans passage de paramètres et prise en compte par défaut de ces deux lignes et aussi avec la possibilité de jongler avec les inverseurs

Faites... donc... comme bon vous semble selon vos préférences.
 

Pièces jointes

Dernière édition:
Bonjour le Forum,
suite à divers échanges sur la conception de cette classe, le passage de paramètres via l'instanciation sera abandonné. Une V2.1 "est sur le feu, attendons la fin de la cuisson" 🙂
Occasion aussi d'approfondir les tests car dans les versions précédentes quelques coquilles s'y étaient nichées 🙁
 
- 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…