saucissonner des fichiers TXT

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Auverland
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 6 février 2019
Version d'Excel : 2016 FR

Message par Auverland » 11 février 2019, 15:25

Bonjour le Forum

Je cherche une tite macro pour saucissonner mes fichier txt qui sont beaucoup trop gros pour excel. (1,5giga )
Je cherche à ce que la macro me coupe mes fichiers en plusieurs petit Txt et que ceux-ci garde la première ligne d'entête

Si quelqu'un avais cela dans ses cartons je suis preneur

Merci d'avance et excellente semaine à tous
Avatar du membre
Ausecour
Membre impliqué
Membre impliqué
Messages : 2'985
Appréciations reçues : 314
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 11 février 2019, 15:46

Bonjour,

J'ai déjà dû faire la même chose sur de gros fichiers CSV, tu trouveras des logiciels gratuits sur internet qui permettent de couper un fichier texte en plusieurs plus petits fichiers textes, mais ça ne mettra pas tout le temps les en-têtes en haut des fichiers, il faudra que tu les replaces toit même, et que tu fasses attention aux coupures de colonnes :)
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 933
Appréciations reçues : 124
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 11 février 2019, 17:03

Bonjour à tous,

Pour ce genre de tâche, j'ai ma méthodo, démo jointe :

Au début un fichier Test.txt contenant une liste de communes de plusieurs régions.

La procédure "Sub Saucisson" :
* demande la sélection du fichier txt => Ndf = Selection_Fichier
* lit le fichier => T1 = T_Import(Ndf)
* dresse la liste des régions => T2 = Combo_T(T1, 2)
* et pour chaque région :
-- selectionne les lignes correspondantes => T3 = Select_T(T1, 2, CStr(T2(i)))
-- exporte ces lignes dans un fichier txt nommé avec le nom de la région => S = T_Export(T3, Ndf)
* et enfin affiche un message de résultat => MsgBox IIf(R = 1, "Ok trop bien!", "La Loose :(")

Nb : pour la démo, le fichier txt de 3ko est extrait d'un fichier de 3,7 Go

Ici le découpage se fait selon les régions (ici en colonne 2). En fonction du txt initial, on peut faire un découpage sur un autre critère quelconque
Et préservation de la ligne d'entête pour chaque fichier enfant, bien sûr
' ***********************************************************************
' *****                                                             *****
' *****        CODE PierreP56 : http://tatiak.canalblog.com/        *****
' *****                                                             *****
' ***********************************************************************


Sub Saucisson()
Dim T1 As Variant, T2 As Variant, T3 As Variant
Dim Ndf As String, S As String
Dim i As Integer, R As Integer

    R = 1
    Ndf = Selection_Fichier
    T1 = T_Import(Ndf)
    T2 = Combo_T(T1, 2)
    For i = 0 To UBound(T2)
        T3 = Select_T(T1, 2, CStr(T2(i)))
        Ndf = ThisWorkbook.Path & "\" & T2(i) & ".txt"
        S = T_Export(T3, Ndf)
        R = R * CInt(S)
    Next i
    MsgBox IIf(R = 1, "Ok trop bien!", "La Loose :(")
End Sub
Saucisson.zip
(28.18 Kio) Téléchargé 2 fois
A
Auverland
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 6 février 2019
Version d'Excel : 2016 FR

Message par Auverland » 11 février 2019, 20:53

Bonjour,

Merci pour cet exemple mais je ne vois pas comment l'adapter à mes fichiers car ceux-ci n'ont pas de critère permettant la coupure.
Mes données sont sous forme Txt en colonne ils comprennent uniquement une entête de colonne et après que des données numérique.

Mon but est de pouvoir les ouvrir et les traiter dans excel
Avec des fichiers de 1,5 giga c'est compliquer, à partir de 800Mo j'ai déjà quelques soucis de mémoire lors de macro

Merci
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 933
Appréciations reçues : 124
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 12 février 2019, 09:24

Pas de souci, c'est facile à adapter avec comme critère un nombre quelconque de lignes.
Voici un exemple, en B1 un nb de lignes (qu'on peut modifier comme on veut).
Comme précédemment :
* on sélectionne un fichier txt
* le code fait successivement des sélections de x lignes jusqu'à la fin du txt
* et exporte ces lignes dans un fichier txt nommé avec le n° de la 1ere ligne de la sélection (1.txt, 101.txt, etc ... si B1=100)
Avec toujours la préservation de la ligne d'entête pour chaque fichier enfant.
' ***********************************************************************
' *****                                                             *****
' *****        CODE PierreP56 : http://tatiak.canalblog.com/        *****
' *****                                                             *****
' ***********************************************************************


Sub Saucisson_nb()
Dim T1 As Variant, T2 As Variant
Dim Ndf As String, S As String
Dim Nb As Long, i As Long, R As Integer

    R = 1
    Nb = Sheets("Feuil1").Range("B1").Value
    Ndf = Selection_Fichier
    T1 = T_Import(Ndf)
    For i = 0 To UBound(T1) Step Nb
        T2 = Select_De_A(T1, i + 1, i + Nb)
        Ndf = ThisWorkbook.Path & "\" & i + 1 & ".txt"
        S = T_Export(T2, Ndf)
        R = R * CInt(S)
    Next i
    MsgBox IIf(R = 1, "Ok trop bien!", "La Loose :(")
End Sub
Ci-joint fichier xl avec txt de test
Pierre
Saucisson (2).zip
(67.95 Kio) Téléchargé 2 fois
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message