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

Macros et VBA Excel Discussion :

Scinder un fichier CSV en plusieurs fichier CSV en n lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 9
    Par défaut Scinder un fichier CSV en plusieurs fichier CSV en n lignes
    Bonjour,

    Je voudrais développez une macro permettant d’ouvrir un fichier CSV (n'importe lequel) et de le scinder en plusieurs nouveaux fichiers CSV de taille définie par l’utilisateur. Je m'explique, par exemple, une boîte de dialogue demandera à l’utilisateur un nombre de lignes maximum au-delà duquel le fichier CSV sera découpé en plusieurs fichiers. Donc si il y a 100 lignes dans le fichier et que l'utilisateur demande 10 lignes par fichier, il y aura 10 fichiers CSV de 10 lignes. J'aimerais également garder le même en-tête pour chaque fichier créé.


    Je débute en VBA et j'ai du mal avec toutes ces notions. Merci d'avance à ceux qui m'aideront.

    En vous souhaitant une bonne journée

    Cordialement,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Bonjour,

    Tout n'est qu'une question de méthode ! Que veux-tu faire en somme :
    1- Ouvrir un fichier d'entrée en CSV (ou autre, d'ailleurs, c'est kif-kif...) en lecture
    2- Lire la 1ère ligne (celle des entêtes) et la conserver quelque part
    3- Demander à l'utilisateur combien de lignes (nblignes) doit comporter chacun de tes fichiers de sortie
    4- Ouvrir un fichier de sortie en écriture
    5- Y écrire la ligne d'entête
    6- Lire les lignes du fichier d'entrée de 2 à (nblignes + 1) et les écrire au fur et à mesure dans le 1er fichier de sortie
    7- Refermer le 1er fichier de sortie quand tu as atteint nbligne + 1 (celle de l'entête)
    8- Renouveler l'opération 4 - 5 - 6 - 7 tant que tu n'as pas atteint la fin du fichier d'entrée
    9- Fermer le fichier d'entrée

    Tu vois, détaillé comme ça, ça parait déjà plus clair !

    Regarde la méthode OpenAsTextStream dans l'aide de VBA, tu y trouveras presque tout ce qu'il te faut...

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Deux solutions (parmi de nombreuses autres) : soit tu traites le fichier séquentiellement avec des Input et Write, soit tu passes par une feuille de calcul.

    Pour le traitement séquentiel, regarde ici :
    https://msdn.microsoft.com/fr-fr/VBA...inputstatement
    https://msdn.microsoft.com/fr-fr/VBA...printstatement

    Pour un traitement par Excel, tu commences par ouvrir le fichier avec Workbooks.OpenText
    https://msdn.microsoft.com/fr-fr/vba...t-method-excel
    Ensuite, tu peux faire une boucle qui prendra les lignes 10 par 10 en les copiant dans un autre onglet et à chaque fois enregistrer l'onglet au format CSV avec un Worksheet.SaveAs en mettant FileFormat à xlCSVWindows.
    https://msdn.microsoft.com/fr-fr/VBA...s-method-excel

  4. #4
    Expert confirmé
    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
    Par défaut
    Salut, au choix, à adapter au contexte.



  5. #5
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 9
    Par défaut
    Bonjour,

    Je vous remercie sincèrement d'avoir pris le temps de répondre. Nul doute que vous différentes réponses m'aideront à la résolution de ce problème.

    Je suis sur excel 2013 et parfois 2010, il y aurait t'il des différences entre les différents excel, notamment sur les fichiers apportés par kiki29?

    Kiki 29, j'ai essayé ton fichier et il bloque à un endroit, pourrais tu m'éclairer? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If FD.Show = True Then
            DoEvents
            Application.ScreenUpdating = False
            Set Wkb = Workbooks.Open(FD.SelectedItems(1), ReadOnly:=True)
            ShFichier.Cells.Delete Shift:=xlUp
            Wkb.Worksheets(1).UsedRange.Copy ShFichier.Range("A1")
            iLastCol = ShFichier.Range(NumCol2Lettre(Columns.Count) & "1").End(xlToLeft).Column ' -> cette ligne ci 
            ShFichier.Range("A1").Resize(, iLastCol).EntireColumn.AutoFit
            Wkb.Close SaveChanges:=False
            Set Wkb = Nothing
            With ShFichier

    Merci,

  6. #6
    Expert confirmé
    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
    Par défaut
    Re, ici il fonctionne sans aucun problème sous 2003/2007
    va voir : Découpage d'un fichier csv (1)

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 9
    Par défaut
    Malheureusement, la même ligne bloque sur ce fichier.
    Je suis en 64bits j'ai fais les modifications pour Private declare Function. Peut être cela a t-il un lien ?

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Faranight Voir le message
    Kiki 29, j'ai essayé ton fichier et il bloque à un endroit, pourrais tu m'éclairer? :
    Pour quelle raison n'indiques-tu pas le message d'erreur renvoyé ? Tu penses que ce serait trop faciliter la tâche de ceux qui essayent de t'aider ?

  9. #9
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 9
    Par défaut
    Bonjour,

    Vous avez raison. Désolé je n'ai pas cette habitude.

    Nom : Sans titre.png
Affichages : 4692
Taille : 15,3 Ko

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Sub test()
    Dim TB, Nb As Integer, txt As String, FichieNb As Integer
    TB = Split(OuvrirFichier("C:\MyRepertoire\Test.Csv"), vbCrLf)
    Nb = Application.InputBox("Enter the number", "Program", Type:=1)
    For I = 1 To UBound(TB)
        If txt = "" Then txt = TB(0)
        txt = txt & vbCrLf & TB(I)
        If I Mod Nb = 0 Then FichieNb = FichieNb + 1: CreerFichierTxt "C:\MyRepertoire\Test" & FichieNb & ".Csv", txt: txt = ""
    Next
    If txt <> "" Then FichieNb = FichieNb + 1: CreerFichierTxt "C:\MyRepertoire\Test" & FichieNb & ".Csv", txt: txt = ""
    End Sub
    Private Sub CreerFichierTxt(Fichier, txt)
    Dim fso, NewFichier
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set NewFichier = fso.OpenTextFile(Fichier, 2, True)
    NewFichier.Write txt
    NewFichier.Close
    Set NewFichier = Nothing
    Set fso = Nothing
    End Sub
    Public Function OuvrirFichier(Fichier)
    Set oFs = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFs.OpenTextFile(Fichier)
    OuvrirFichier = oFile.ReadAll
    oFile.Close
    End Function

Discussions similaires

  1. [Toutes versions] Ventiler mon fichier .csv en plusieurs fichiers .csv
    Par X.e.N.o.N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/07/2018, 05h11
  2. Réponses: 1
    Dernier message: 22/03/2017, 15h14
  3. [Batch] Découper un fichier CSV en plusieurs fichiers CSV de 3000 lignes
    Par skyser dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/06/2016, 17h12
  4. Convertir CSV en plusieurs fichiers HTML
    Par lmplmp dans le forum Débuter
    Réponses: 6
    Dernier message: 07/06/2012, 16h56
  5. [MySQL] Export CSV de plusieurs fichiers
    Par yamatoshi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/03/2012, 16h50

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