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
 

PrinceCorwin

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

bonsoir,

Peut être une idée bête.
Pourquoi faire de l'ADODB pour attaquer un fichier .txt ?
En faisant du traitement de fichier séquentiel sous Excel ca n'irait pas ?
Je n'ai jamais eu de fichier aussi Gros...

VB:
Sub transfert()
k = 0
Open FOrigine For Input As #1
For i = 1 To 4
    Open "fichier" & i For Output As #2
    For j = 1 + (k * i) To 1000000 * i
        Line Input #1, ligne
        Print #2, ligne
    Next
    k = k + 1000000
Next
End Sub

Je ne sais pas si prendra du temps...
A tester peut être

Bonne nuit
 
Dernière édition:

anthooooony

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

Bonjour à tous


camarchepas ne fichier est sur le réseau, mais pour le traiter je ne mets en local.



PrinceCorwin: le code bloque, il me met que le fichier existe deja...


mutzik J'ai essayé directement de le mettre dans access parce qu'en plus la finalité était celle la, couper un fichier txt en fichier xls, et recuperer chaque fichier en table, faire une requete d'union pour recuperer l ensemble !!
Mais en faite j'ai un traitement barbare les dates qui sont avec des "." 20.10.2012 entre chaque colonne j'ai "|". En plus je le lance en arriere plan dans SAP ce qui fait que j'ai plein de ligne avec des mises en pages en doublons, enfaite j'ai une page toutes les 100lignes en truc comme ça, je dois supprimer pret de 300 000 lignes. c'est beaucoup plus simple pour moi de le faire sur excel.

Je continue à cherche de mon cote, merci pour votre aide en tt cas

anthooooony
 

MJ13

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

Re

Sinon, adapter le i en fonction du nombre à découper avec ce code:

Code:
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 = 10 Then Close #2: j = j + 1: GoTo suite
 
Wend
Close
End Sub

Petite correction :eek: avec j à initialiser au début.
 
Dernière édition:

anthooooony

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

Re bonjour,

Un exemple de mon fichier,

j'ai 10 ligne de recap du fichier, nombre d enregistrement.

Ensuit j'ai des lignes avec des traits "-"

En plein de traitement a faire, c est une extraction d sap donc avec tt ces avantages...
 

Pièces jointes

  • Exemple p.txt
    27.9 KB · Affichages: 63

PrinceCorwin

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

Bonjour à tous,

Bonjour à tous



Normalement, il faut mettre un close #2 après le k= k...

Effectivement !
Si on ne ferme pas le fichier #2, Excel ne pourra pas affecter #2 à un autre fichier.

Je n'ai pas gérer le fait d'atteindre la fin du FichierOrigine.
While not eof(1)
...
wend


Bonne journée
 

Statistiques des forums

Discussions
312 911
Messages
2 093 509
Membres
105 744
dernier inscrit
laure.mg