Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

anthooooony

XLDnaute Occasionnel
Bonjour cher Excelien

Après plusieurs heures passés devant cette ordinateur windows je m'incline(encore) devant vous pour vous demander de l'aide !!

J'ai un fichier txt qui fait 800Mo, avec 100Mo de retraitement mais ce n'est pas le sujet !
C'est un export avec toutes les pieces de ma société.

J'ai une macro qui permet de tout les 500 000 de lignes créer un onglet. C'est bien, lors qu'on a 1 ou deux millons de lignes, la je suis à pret de 3 millions et mes RAM ne suivent pas, ce qui fait qu'il plante.

Auriez vous un code VBA qui pourrait lui demander de se découper par tranche?

Exemple
1 à 1 000 000
Je pourrais la lancer une deuxième fois
1 000 001 à 2 000 000
2 000 001 à 3 000 000

Il me sera plus facile a traiter par la suite 1à1 qu'un fichier ayant 3ou4millons de ligne...(que d ailleur je n arrrive pas a avoir vu qu'il plante avant la réstitution des infos.)
Merci à vous

anthooooony

Code:
'Option Explicit

Sub ImportLargeFile()
Dim strFilePath As String, strFilename As String, vFullPath As Variant
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object

vFullPath = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Please select text file...")

If vFullPath = False Then Exit Sub
Application.ScreenUpdating = False

Set oFSObj = CreateObject("Scripting.FileSystemObject")
strFilePath = oFSObj.GetFile(vFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(vFullPath).Name

Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strFilePath & ";" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""

Set oRS = CreateObject("AdoDb.Recordset")

oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1
While Not oRS.EOF
Sheets.Add
ActiveSheet.Range("A1").CopyFromRecordset oRS, 500 000
Wend
oRS.Close
oConn.Close
Application.ScreenUpdating = True
End Sub
 

mutzik

XLDnaute Barbatruc
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

re,

après avoir regardé ton fichier, c'est un export txt pur et dur de SAP
- il existe dans SAP une possibilité d'extraction en format XLS direct, je crois que cela résoudrait déjà une partie de ta problématique (j'utilise cela dans l'entreprise dans laquelle je travaille)
- nous faisons également un traitement excel sur cette extraction avant d'envoyer les données dans une base ACCESS
-cela s'appelle Business Explorer (BI) c'est un sous-répertoire dans SAP sur le disque C:\ProgramFiles\SAP\BusinessExplorer\BI
 

PrinceCorwin

XLDnaute Occasionnel
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

Bonjour,

Voici la version "opérationnelle du programme
VB:
Sub transfert()
dos = "C:\Users\jcb.SIS\Documents\Forum eXcell\"
forigine = dos & "exemple.txt"
fdest = dos & "sortie"
j = 100
k = 0
Open forigine For Input As #1
While Not EOF(1)
    For i = 1 To 4
        Open fdest & i & ".txt" For Output As #2
        For j = 1 + (k * (i - 1)) To j * i
            If EOF(1) Then
                Close #2
                GoTo fin
            Else
                Line Input #1, ligne
                Print #2, ligne
            End If
        Next
        k = k + j
        Close #2
    Next
Wend
fin:
Close #1
End Sub


Bonne journée
 
Dernière édition:

mutzik

XLDnaute Barbatruc
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

re,re

sinon je viens de faire la manip suivante
- ouverture de ton fichier txt dans notepad ++
- tout copier
dans excel :
- tout coller collage spécial / valeurs
- selectionner colonne A
- données convertir / délimité / autre => et faire touche 'Alt' et taper 124 ce qui donne |

reste après a épurer un peu le fichier, mais vraiment plus rien d'insurmontable (sauf si tu es en excel 2003, je suis en v2007)
 

anthooooony

XLDnaute Occasionnel
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

J'utilise aussi SAP et XLS pour des fichiers de 200 000lignes en extraction, mais cela prend beaucoup trop de ressource, mon fichier fait plus de 800Mo, c'est long en traitement, ca prend beaucoup de ressource pour moi et pour les autres utilisateurs.
Notre DSI nous a gentillement informé qu'il fallait le faire en traitement en arrière plan, puis le recuperer dans le spool, puis le mettre en txt, puis le retraiter en excel pour faire nos stats, du coup on se "tape" une mise en page barbarre dont le traitment est tres compliqué pour des non initiés comme moi, ca fait une semaine que j'essaye de trouver des codes pour le couper.

Je viens de regarder dans programme files sap, je n'ai pas businessexplorer je pense que chaque société négocie des modules différents, nous ne devons pas avoir la meme chose..

grrr
 

mutzik

XLDnaute Barbatruc
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

re, re, re,

je viens d'essayer l'import dans access avec la méthode décrite pour excel (délimité avec alt + 124)
cela fonctionne très bien aussi, et tu n'est (presque) plus limité avec le nombre d'enregistrements

sinon, as-tu la possibilité de mettre des critères sur ton export ou est-ce toujours la base entière ...
 
Dernière édition:

anthooooony

XLDnaute Occasionnel
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

Bonjour à tous

Cette solution répond à mon problème, la création de fichier tout les 1 000 000 de lignes j'en ai 4 !!

Il me reste à traiter la mise en page de chaque fichier, mais deja j'ai gagné beaucoup de temps.


PrinceCorwin ton code sors 4 fichiers, 1 avec une 50ène de ligne, et les trois autres avec 0 lignes dedans, mais avec 3 fichiers crées quand meme bisarre...

merci à vous tous

Sub transfert()
Close
Forigine = ThisWorkbook.Path & "\test.txt"
Open Forigine For Input As #1
J=1
suite:
i = 0
Open ThisWorkbook.Path & "\fichier" & j & ".txt" For Output As #2

While Not EOF(1)
i = i + 1

Line Input #1, ligne
Print #2, ligne
If i = 1000000 Then Close #2: j = j + 1: GoTo suite

Wend
Close
End Sub
 

mutzik

XLDnaute Barbatruc
Re : Découper fichier txt par tranche de 1 à 1million de 1million1 a 2 millons

bonjour,

Sub transfert()
Close
Forigine = ThisWorkbook.Path & "\test.txt"
Open Forigine For Input As #1
J=1 : i = 0
Open ThisWorkbook.Path & "\fichier" & j & ".txt" For Output As #2

While Not EOF(1)
i = i + 1
Line Input #1, ligne
Print #2, ligne
If i = 1000000 Then
Close #2
j = j + 1 : i = 0
Open ThisWorkbook.Path & "\fichier" & j & ".txt" For Output As #2​
end if
Wend
Close
End Sub

fonctionnera beaucoup mieux
 

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet