XL 2019 Fichier ".txt" de plus de 2.000.000 de lignes !

Titof06

XLDnaute Junior
Bonjour,

J'ai à traiter un fichier texte de plus de 2.000.000 de lignes.

Excel n'accepte qu'environ 1.500.000 lignes.

Je dois extraire des informations relatives à des mises à jour de fournisseurs et par rapport à une date précise.

Est-ce que quelqu'un pourrait me conseiller un logiciel ou une façon de sortir des informations de ce méga fichier texte, svp ?

Par avance, Merci 👍

Bonne Journée, Titof06 :)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Titof06 :),

  1. Si on veut rester dans Office, on pourrait utiliser Access (à voir)
  2. Utiliser Power Query qui doit sans doute accepter en entrée des fichiers texte (mais je laisse le soin à d'autres de répondre sur ce point)
  3. En excel, on pourrait lire le fichier texte source et construire n classeurs .xls. On pourrait faire une partition des fournisseurs de telle sorte que chaque partition des fournisseurs corresponde à un nombre d'enregistrements inférieur à la capacité d'Excel. Ensuite, on traiterait chacun des n classeurs à tour de rôle dans Excel. Au lieu de n classeur, on pourrait faire un seul classeur avec n feuilles.
  4. Si après traitement le nombre total de lignes des classeurs (ou des feuilles) a été ramené sous la limite d'Excel, on peut en faire un seul classeur ou sinon refaire un fichier texte
Pour le cas 3, espérons qu’aucun fournisseur n'ait à lui seul plus d'enregistrements que le nombre max de ligne d'un classeur Excel.

Sans connaitre la structure du fichier source, sans connaitre les traitements à faire, que dire de plus ?
 
Dernière édition:

Titof06

XLDnaute Junior
Bonjour mapomme,

Merci pour cette réponse avec ces propositions.

Pour les diverses propositions, voici un complément d'information.
C'est un fichier hebdomadaire voire journalier.
Le problème est que l'on ne sait pas à l'avance quel fournisseur a eu une modification tarifaire.
Il faut donc automatiser les fournisseurs, et un à un, définir les divers articles mis à jour.

Avec Access, c'est bien possible, mais très très long en traitement.

Je fais quelques macros, donc je pensais pouvoir le faire mais pas avec autant de lignes.

J'ai réussi à intégrer les 1.750.000 lignes avec PowerQuery en faisant une connexion, pas un chargement.
Mon problème est, quelle requête je peux faire pour me sortir mes fournisseurs séparément et par rapport à la date de J-1.
Je ne sais pas faire ce genre de requête.

Je joins 2 fichiers....avec 7 lignes seulement, mais en tout, il y en a plus de 1.750.000 lignes et pèse 480 Mo celui hzn_sacha.txt) et l'autre de 60 Mo (famrem_sacha.txt).

Merci et Bonne Journée,

Titof06 :)
 

Pièces jointes

  • famrem_sacha_Pour Test.txt
    573 bytes · Affichages: 17
  • hzn_sacha_Pour Test.txt
    1.4 KB · Affichages: 17

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Mon problème est, quelle requête je peux faire pour me sortir mes fournisseurs séparément et par rapport à la date de J-1.
Je ne sais pas faire ce genre de requête.

Comme je le disais plus haut, je ne suis pas encore mis à PQ (je sais ce n'est pas bien)
Mais des cadors en PQ sont présents sur ce forum. En espérant qu'ils remarquent votre demande. ..
 

dysorthographie

XLDnaute Accro
Bonjour,

J'ai à traiter un fichier texte de plus de 2.000.000 de lignes.

Excel n'accepte qu'environ 1.500.000 lignes.

Je dois extraire des informations relatives à des mises à jour de fournisseurs et par rapport à une date précise.

Est-ce que quelqu'un pourrait me conseiller un logiciel ou une façon de sortir des informations de ce méga fichier texte, svp ?

Par avance, Merci 👍

Bonne Journée, Titof06 :)
Bonjour,
Tu veux extraire dans quoi ?
Excel ?
Extrait quoi ? Des valeurs unique à une certaine date ? Pour en faire quoi?
 

job75

XLDnaute Barbatruc
Bonsoir à tous,

Téléchargez les fichiers joints dans le même dossier (le bureau).

Ouvrez le fichier .xlsm et exécutez la macro affectée au bouton :
VB:
Sub Creer_feuilles_fournisseurs()
Dim chemin$, fournisseurs$, fichier$, Source, n%, d As Object, x%, titre$, texte, code$, a, b, i&, nomfeuille$
chemin = ThisWorkbook.Path & "\"
fournisseurs = chemin & "Fournisseurs\"
If Dir(fournisseurs, vbDirectory) = "" Then MkDir fournisseurs 'crée le sous-dossier
fichier = Dir(fournisseurs & "*.txt")
'---vide le sous-dossier---
While fichier <> ""
    Kill fournisseurs & fichier
    fichier = Dir
Wend
'---création des fichiers et feuilles fournisseurs---
Source = Array("famrem_sacha_Pour Test.txt", "hzn_sacha_Pour Test.txt") 'à adapter
For n = 0 To UBound(Source)
    Set d = CreateObject("Scripting.Dictionary")
    x = FreeFile
    Open chemin & Source(n) For Input As #x 'ouverture en lecture séquentielle
    Line Input #x, titre
    While Not EOF(x)
        Line Input #x, texte
        code = Split(texte, ";")(0) 'code fournisseur
        If Not d.exists(code) Then d(code) = titre
        d(code) = d(code) & vbLf & texte
    Wend
    Close #x
    a = d.keys: b = d.items
    '---création des fichiers---
    For i = 0 To UBound(a)
        fichier = fournisseurs & "F" & Format(n + 1, "00") & a(i) & ".txt"
        x = FreeFile
        Open fichier For Output As #x 'ouverture en écriture séquentielle
        Print #x, b(i)
        Close #x
    Next i
    '---création des feuilles---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For i = 0 To UBound(a)
        nomfeuille = "F" & Format(n + 1, "00") & a(i)
        fichier = fournisseurs & nomfeuille & ".txt"
        On Error Resume Next
        Sheets(nomfeuille).Delete 'supprime la feuille si elle existe
        On Error GoTo 0
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = nomfeuille
        With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ActiveSheet.Cells(1))
            .TextFilePlatform = 65001 'origine UTF-8
            .TextFileParseType = xlDelimited
            .TextFileSemicolonDelimiter = True
            .Refresh
            .Parent.Names(.Name).Delete 'supprime le nom défini dans la feuille
            .Delete 'supprime la requête
        End With
Next i, n
Sheets(1).Activate
End Sub
Elle crée les fichiers .txt et les feuilles qui correspondent aux "CodFourAM" (1ère colonne).

J'ai fait commencer leurs noms par F01, F02... pour le cas où il y aurait des doublons de codes entre les fichiers sources.

Dans PowerQuery j'ai vu que les fichiers sources ont été créés sur UTF-8 (65001).

Bonne nuit.
 

Pièces jointes

  • Créer feuilles fournisseurs.xlsm
    22.2 KB · Affichages: 11
  • famrem_sacha_Pour Test.txt
    573 bytes · Affichages: 7
  • hzn_sacha_Pour Test.txt
    1.4 KB · Affichages: 7

Titof06

XLDnaute Junior
Bonjour job75,

UN ÉNORME MERCI 👍

Cela fonctionne parfaitement.

Si je peux juste abuser un peu plus, il faudrait que je puisse définir une date, par exemple depuis le 01/03/2024 jusqu'à maintenant.

Je vais essayer de comprendre ces lignes de code, mais pour moi, c'est du "HIGH LEVEL" !

Bonne Journée,

Titof06 :)
 

Discussions similaires

Réponses
6
Affichages
362

Statistiques des forums

Discussions
312 932
Messages
2 093 724
Membres
105 798
dernier inscrit
Sly67