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 !

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
Bonsoir Patrick,

Après "moult" réflexions car ça m'a un peu "turlupiné"... et il n'y a que les ImBBBbbb...le qui ne changent pas d'avis.... 🙂
Petite prise en compte d'une de tes remarques sur l'instanciation à propos du passage des deux derniers paramètres...
Une v2.01 a donc été jointe ICI
Ainsi on le choix entre les deux méthodes.
Bien entendu on a toujours les deux inverseurs qui peuvent modifier les choix pris par défaut à l'instanciation puisqu'elle cherche à les embarquer automatiquement avec bien entendu le test de la présence de la ligne total - ceci n'a pas changé 🙂

VB:
' L'instanciation se résume donc à ceci et sans les deux derniers booléens de la v2.0
'****************************************************************************************
Sub INSTANCIATE_02()
    Set oTS = New CLS_TS
    Call oTS.Instantiate(TBL_TS_02, FEUILLE_TS_02)
End Sub

'******************************************************
'* Un exemple
'******************************************************
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

'***********************************************
'*   INSTANICATION
'**********************************************
Sub Instantiate(hTB As String, _
Optional hWk As String = "§_§ACTIVESHEET§_§")  '**** suppression des deux booléens *****


    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
 
re bonsoir @oguruma
2 points
1° le false je le met dans un else au cas ou si on le demande et qu'en fait il n'y est pas
toi tu fait deux fois la commande
pour finir a true 🤣 🤣 🤣 🤣

2° tu variablise le listboject et tu t'en sert pas ????????on marche sur la 🙃
donc tu fait appel x fois a la collection listobjects

VB:
 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 = pTable.ShowTotals = True ' MAIS :=> On vérifie si cette ligne total existe réellement !
    If pHasTotalRow Then
        Set pDataTotalBody = pTable.TotalsRowRange ' Dans ce cas OUI on la récupère
    Else
        pIncludeTotal =false
    End If

après je sais ce que tu a fait mais HasTotalRow c'est pas toi qui le décide c'est le code car c'est un boolean qui dans ma version
est le résultat du control si elle existe ou pas " HasTotalRow = pTable.ShowTotals = True"

pour moi les pInclude.... ne doivent être gérés que dans l'appel
mais je te laisse finir j’attends la new version

bref c'est un peu embrouillé ton truc
dans ma version
dans l'appel
Code:
 les deux derniers arguments c'est pour les deux 
Call INSTANCIATE_02
    Call oTS.exportToHTML(ThisWorkbook.Path & "\TestExportToHTML" & ".HTML", True, true, true)
    MsgBox "Source patricktoulon - XLD - https://excel-downloads.com/"

la fonction de la classe
Code:
Sub exportToHTML( _
                 hFileName As String, _
                 Optional hReplace As Integer = True, _
                 Optional WhithHeader As Boolean = False, _
                 Optional WithTotal As Boolean = False)
'reste de la fonction
'si j'ai demandé le header et qu'il n'y est pas c'est géré
'si j'ai demandé le total et qu'il n'y est pas c'est géré
 
re bonsoir @oguruma
2 points
1° le false je le met dans un else au cas ou si on le demande et qu'en fait il n'y est pas
toi tu fait deux fois la commande
pour finir a true 🤣 🤣 🤣 🤣

2° tu variablise le listboject et tu t'en sert pas ????????on marche sur la 🙃
donc tu fait appel x fois a la collection listobjects

VB:
 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 = pTable.ShowTotals = True ' MAIS :=> On vérifie si cette ligne total existe réellement !
    If pHasTotalRow Then
        Set pDataTotalBody = pTable.TotalsRowRange ' Dans ce cas OUI on la récupère
    Else
        pIncludeTotal =false
    End If

après je sais ce que tu a fait mais HasTotalRow c'est pas toi qui le décide c'est le code car c'est un boolean qui dans ma version
est le résultat du control si elle existe ou pas " HasTotalRow = pTable.ShowTotals = True"

pour moi les pInclude.... ne doivent être gérés que dans l'appel
mais je te laisse finir j’attends la new version

bref c'est un peu embrouillé ton truc
dans ma version
dans l'appel
Code:
 les deux derniers arguments c'est pour les deux
Call INSTANCIATE_02
    Call oTS.exportToHTML(ThisWorkbook.Path & "\TestExportToHTML" & ".HTML", True, true, true)
    MsgBox "Source patricktoulon - XLD - https://excel-downloads.com/"

la fonction de la classe
Code:
Sub exportToHTML( _
                 hFileName As String, _
                 Optional hReplace As Integer = True, _
                 Optional WhithHeader As Boolean = False, _
                 Optional WithTotal As Boolean = False)
'reste de la fonction
'si j'ai demandé le header et qu'il n'y est pas c'est géré
'si j'ai demandé le total et qu'il n'y est pas c'est géré
Bonjour Patrick,
Il y avait de la redondance que j'ai corrigé [instanciation et tests] (post un peu rapide hier soir...) tout en gardant l'idée de partir par défaut que l'on prend en compte la ligne titre et la ligne total (quand elle existe) par défaut.
Nous ne sommes pas en phase sur ce point. Ca se défend.
Cependant il est vrai que dans certaine version j'étais parti dans le même sens que toi. Il m'a pour autant semblait plus intéressant de figer cela dans l'instanciation et de jongler sur les propriétés après coup. (J'ai déjà vu plusieurs fois ce genre de développement où on change les règles de fonctionnement via des propriétés - c'est un peu comme le réglage du calculateur d'une voiture on intervient sur les propriétés du moteur via la console).
Mais pourquoi pas une 2.02 à suivre avec le passage de ces booléens à l'appel de la fonction.
Ainsi chacun fera son choix avec 3 modes d'utilisation.
Après comme disait ma Grand Mère "chacun fait midi à sa porte comme il le souhaite" 🙂

VB:
    ' On va gérer les lignes titre et total
    '--------------------------------------
    pHasTotalRow = 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
 
Bonjour @oguruma et ben alors ????
pour figer a true tu change les option boolean a true des fonction
ce qui fait que dans mes appels tu peux te passer des arguments
et si ils n'y sont pas c'est géré automatiquement avec hasheaderRow et hasTotalRow
et si tu les veux pas false,false à la fin de l'appel

Ps: punaise !!! tu recommence avec tes wk.ListObjects(hTB) alors que tu a l'object "pTable " de dispo 🤣 🤣 🤣 🤣 🤪

en codant comme ça tu t'enferme dans un accabit qui va te limiter en evolution
et je parle même pas du débauchage en cas d'erreur ou de résultat non attendu
tu devra chercher dans instanciate ou la fonction concernée voir même ailleurs
alors qu'avec ma méthode tu sais tout de suite ou il y a un blème
 
Bonjour @oguruma et ben alors ????
pour figer a true tu change les option boolean a true des fonction
ce qui fait que dans mes appels tu peux te passer des arguments
et si ils n'y sont pas c'est géré automatiquement avec hasheaderRow et hasTotalRow
et si tu les veux pas false,false à la fin de l'appel

Ps: punaise !!! tu recommence avec tes wk.ListObjects(hTB) alors que tu a l'object "pTable " de dispo 🤣 🤣 🤣 🤣 🤪

en codant comme ça tu t'enferme dans un accabit qui va te limiter en evolution
et je parle même pas du débauchage en cas d'erreur ou de résultat non attendu
tu devra chercher dans instanciate ou la fonction concernée voir même ailleurs
alors qu'avec ma méthode tu sais tout de suite ou il y a un blème
AH ouiii
"Ps: punaise !!! tu recommence avec tes wk.ListObjects(hTB) alors que tu a l'object "pTable " de dispo "
==> c'est passé sous les radars... => mince 🙁 et pourtant je l'avais mis dans l'idée de le réutiliser il n'était pas là pour rien
une 2.02 est en chemin et je pense que ce sera the last one
après pour l'avoir dit... le code est opensource à chacun des futurs utilisateurs de le reprendre à sa manière
ces multiples versions et échanges montre qu'il n'y a rien de "graver dans le marbre"
 
Dernière édition:
- 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