IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Découpage d'un fichier csv (1)


Sujet :

Contribuez

  1. #1
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut Découpage d'un fichier csv (1)
    Cet utilitaire permet de découper un fichier Excel *.CSV en x fichiers dans un dossier créé automatiquement.

    Ces fichiers seront composés d'un Nb de lignes/fichier avec ou sans l'entête.
    Cet entête peut être composé de n lignes.
    Ces fichiers auront dans leurs préfixes le n° d'ordre de leur génération précédé par l'indication du Nb de lignes par fichier.
    Toutes ces valeurs et dénominations sont modifiables par l'utilisateur.

    Extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub Découpage()
    Dim iLastRow As Long, iLastCol As Long, i As Long, iRowDep As Long, iRowFin As Long, iNbFichiers As Long
    Dim ClasseurTempo As Workbook, sDossier As String, sCheminFichier As String, sNom As String
    Dim bVide As Boolean, bEntete As Boolean, bEffacer As Boolean, FSO As Object, iNbLignes As Long, sPrefixe As String, sNomDossier As String
    Dim Dep As Currency, Fin As Currency, Freq As Currency, iEntete As Long
     
        QueryPerformanceCounter Dep
     
        With Application
            .ScreenUpdating = False
            .StatusBar = ""
        End With
     
        bVide = ShParam.CheckBoxes("chkVider").Value = 1
        bEntete = ShParam.CheckBoxes("chkEntête").Value = 1
        bEffacer = ShParam.CheckBoxes("chkEffacer").Value = 1
     
        sNomDossier = ShParam.Range("B1")
        sPrefixe = ShParam.Range("B2")
        iEntete = ShParam.Range("B3")
        iNbLignes = ShParam.Range("B4")
     
        iLastRow = ShFichier.Range("A" & Rows.Count).End(xlUp).Row
        iLastCol = ShFichier.Cells(1, Columns.Count).End(xlToLeft).Column
        iNbFichiers = (iLastRow - 1) \ iNbLignes - (((iLastRow - 1) Mod iNbLignes) > 0)
     
        sDossier = ThisWorkbook.Path & "\" & sNomDossier
        If bVide Then
            Set FSO = CreateObject("Scripting.FileSystemObject")
            If FSO.FolderExists(sDossier) Then FSO.DeleteFolder sDossier, True
            Set FSO = Nothing
        End If
     
        CreationDossier sDossier
        sCheminFichier = sDossier & "\" & sPrefixe
        If iNbFichiers = 0 Then
            MsgBox "Il faut avoir sélectionné un fichier !", vbOKOnly + vbInformation
            Exit Sub
        End If
     
        iRowDep = iEntete + 1
        iRowFin = iRowDep + iNbLignes - 1
     
        Set ClasseurTempo = Workbooks.Add
     
        For i = 1 To iNbFichiers
            If bEntete Then
                ShFichier.Range("A1:A" & iEntete).Resize(, iLastCol).Copy ClasseurTempo.Worksheets(1).Range("A1")
                ShFichier.Range(ShFichier.Cells(iRowDep, "A"), ShFichier.Cells(iRowFin, iLastCol)).Copy ClasseurTempo.Worksheets(1).Range("A" & iEntete + 1)
            Else
                ShFichier.Range(ShFichier.Cells(iRowDep, "A"), ShFichier.Cells(iRowFin, iLastCol)).Copy ClasseurTempo.Worksheets(1).Range("A1")
            End If
     
            ClasseurTempo.Worksheets(1).Range("A1").Resize(, iLastCol).EntireColumn.AutoFit
     
            Application.DisplayAlerts = False
            sNom = sCheminFichier & "_" & iNbLignes & " (" & Format(i, "00000") & ").csv"
            If bEntete Then EnteteClasseurTempo iEntete, ClasseurTempo
            ClasseurTempo.SaveAs Filename:=sNom, FileFormat:=xlCSV, Local:=True
            Application.DisplayAlerts = True
     
            iRowDep = iRowDep + iNbLignes
            iRowFin = iRowFin + iNbLignes
            ClasseurTempo.Worksheets(1).Cells.Clear
            Application.StatusBar = i & " / " & iNbFichiers
        Next i
     
        If bEffacer Then ShFichier.Cells.Delete Shift:=xlUp
     
        ClasseurTempo.Close savechanges:=False
        Set ClasseurTempo = Nothing
        With ShParam
            .Select
            .Range("F1").Select
        End With
        Application.ScreenUpdating = True
     
        QueryPerformanceCounter Fin
        QueryPerformanceFrequency Freq
     
        Application.StatusBar = Application.StatusBar & " / Terminé : " & _
                                Format(((Fin - Dep) / Freq), "0.000 s") & " / " & _
                                Format(((Fin - Dep) / Freq) / iNbFichiers, "0.000 s")
    End Sub
    Téléchargeable ici
    Images attachées Images attachées  

Discussions similaires

  1. [Toutes versions] Découpage d'un fichier CSV
    Par NoMercy007 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 06/05/2017, 17h37
  2. Découpage d'un fichier csv
    Par jokko dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2010, 14h31
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo