Fractionner fichier volumineux

Bonjour le forum,

J'ai un fichier accès volumineux dont je désir le fractionner en multiples fichier excel de 1 millions de ligne chacun,

Comment procéder à partir de commandes ou VBA sur acces SVP?

Crdt

Bonjour Kikim,

Tu parles bien de VBA sous MS ACCESS ?

Bonjour GVIALLES,

Ou bien VBA sur MS ACCES ou manipulation sur ACCES sans VBA.

Crdt

Kikim,

Le format du fichier volumineux est-il .csv ou xls ou xlsx ou autre chose?

GVIALLES,

C'est un fichier CSV de 400 Mo, voir 15 millions de lignes separrées par virgules. Pour cela j'ai essayé de le traiter en premier lieu via MSAcces.

Peux-tu fournir un échantillon des 3 première lignes du fichier?

Voilà le fichier en pièce joint.

En effet il me faut comme objectif final de le convertir en excel et le partager selon le variable en colonne "V".

Crdt

5do-0.csv (1.15 Ko)

Kikim,

Je te propose le code VBA suivant à intégrer au choix dans ACCESS ou EXCEL :

Sub SplitHugeFile()
    Const cNbLines = 1000000
    Dim oFS As Object
    Dim oTSIn As Object
    Dim oTSOUT As Object

    Dim sFileNameIN As String, sFileNameOUT As String
    Dim sBuffer As String, lnbFiles As Integer
    Dim lPos1 As Long, lPos2 As Long, i As Long
    Set oFS = CreateObject("Scripting.Filesystemobject")

    'Recherche du fichier à splitter
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Show
        'Si un fichier a été selectionné
        If .SelectedItems.Count > 0 Then
            'Récupération du nom du fichier sélectionné
            sFileNameIN = .SelectedItems(1)
            lPos1 = InStrRev(sFileNameIN, "\") 'Position de début du nom de fichier d'entrée sans le chemin
            lPos2 = InStrRev(sFileNameIN, ".") 'Position de l'extention du fichier d'entrée
            If lPos2 = 0 Then
                'S'il n'y a pas d'extention : on se positionne à la fin du nom de fichier d'entrée
                lPos2 = Len(sFileNameIN)
            End If
            'Ouverture du fichier d'entrée en lexture
            Set oTSIn = oFS.OpenTextFile(sFileNameIN, 1)
            'Composition du nom du fichier de sortie
            lnbFiles = 1
            sFileNameOUT = Left(sFileNameIN, lPos1) & Mid(sFileNameIN, lPos1 + 1, lPos2 - lPos1 - 1) & "_" & lnbFiles & ".csv"
            'On créé le premier fichier en sortie
            Set oTSOUT = oFS.CreateTextFile(sFileNameOUT, True)
            Do Until oTSIn.AtEndOfStream
                'On boucle sur le nb de lignes voulu
                For i = 0 To cNbLines - 1
                    'On lit une ligne du fichier en entrée
                    sBuffer = oTSIn.ReadLine
                    'On écrit la ligne dans le fichier de sortie
                    oTSOUT.WriteLine sBuffer
                    'Si on se trouve en fin de fichier d'entrée, on sort de la séquence
                    If oTSIn.AtEndOfStream Then
                        Exit Do
                    End If
                Next
                'On ferme le fichier de sortie
                oTSOUT.Close
                'Composition du prochain nom du fichier de sortie
                lnbFiles = lnbFiles + 1
                sFileNameOUT = Left(sFileNameIN, lPos1) & Mid(sFileNameIN, lPos1 + 1, lPos2 - lPos1 - 1) & "_" & lnbFiles & ".csv"
                'On créé le prochain fichier de sortie
                Set oTSOUT = oFS.CreateTextFile(sFileNameOUT, True)
            Loop
            'On ferme le fichier de sortie
            oTSOUT.Close
            'On fait le ménage
            oTSIn.Close
            Set oTSIn = Nothing
            Set oTSOUT = Nothing
            Set oFS = Nothing
        End If
    End With

End Sub

Bonjour,

Impraticable GVIALLES, ça répond parfaitement à mon souhait.

Merci beaucoup

Rechercher des sujets similaires à "fractionner fichier volumineux"