Ventiler mon fichier .csv en plusieurs fichiers .csv

Signaler
Messages postés
9
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2015
-
Messages postés
29897
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 octobre 2020
-
Bonjour,

Je possède un fichier CSV d'une colonne qui contient plus de 5000 lignes et je voudrais créer des nouveaux fichiers CSV avec 249 lignes max à chaque fois dans chaque fichiers. Je n'arrive pas à trouver de solutions à part le faire à la main.. autant dire que c'est un travail pire que laborieux.

Merci d'avance à ceux qui m'aideront !

Bonne journée :)
XeNoN

5 réponses

Messages postés
29897
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 octobre 2020
338
Bonjour.
Bouclez sur les lignes de votre fichier.
Copier chaque ligne dans un nouveau fichier jusqu'à atteindre 243 lignes copiées puis créer un nouveau document et poursuivre avec la même logique. ..

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
Un seul fichier ? soit environ 20 copies/collers ?
Ecrire un programme pour ne servir qu'une fois et pour si peu est quelque peu abusif et une manière de détourner la vocation de l'informatique, qui est celle de remplacer par des programmes des tâches répétitives et fréquentes.
Je rappelle que l'on trouve sur la toile une floppée d'outils gratuits qui font la chose
Messages postés
9
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2015

J'ai cette manipulation à faire sur 6 fichiers dont 1 fichier avec 35 000 lignes d'où ma demande :) Tout en sachant que je suis un total novice en matière de code.

Pouvez-vous m'aider svp ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Tu trouveras ici de l'aide, mais pas de code écrit sans que tu n'aies toi-même fait le moindre effort.

Ouvre ton aide VBA sur l'instruction Open et sur le mot Line Input

Il te faudra, comme te l'a exposé plus haut jordane45 (que je salue) - lire en boucle les lignes de ton fichier
- utiliser un compteur
- écrire dans un autre fichier la chaîne "lue" jusqu'à la limite du compteur. Et donc nécessairement créer un mécanisme de nommage du fichier ainsi créé, pour chaque tranche du fichier originel.

Comme tu le vois, ton problème n'est pas une difficulté spécifique parfaitement isolée (relire les règles de ce forum), mais un ensemble de difficultés distinctes à résoudre.

Reviens avec ton code d'essai si encore en difficulté malgré cette lecture

En te rappelant à nouveau que, si tu ne souhaites pas développer, tu as toujours la possibilité d'utiliser l'un des nombreux outils gratuits d'éclatement de fichiers que l'on trouve sur la toile.
Messages postés
29897
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 octobre 2020
338
Bon..aller...
J'avais quelques minutes à tuer...


Voici un exemple de ce qui est faisable :
(sous Excel)

Sub splitCSVFile()
'**************************
'      VARIABLES
'**************************
Dim nblMAX As Integer
    nblMAX = 249
Dim Nbl As Integer
Dim CsvFile As String
Dim numFile As Integer
Dim compteur As Integer
    compteur = nblMAX
Dim cls As Workbook
Dim cls2 As Workbook
'---------------------------
'Ouverture du fichier CSV
'---------------------------
  CsvPath = "D:\"
  CsvName = "test.csv"
   Workbooks.Open Filename:=CsvPath & CsvName, Local:=True, Delimiter:=";"
  Set cls = Workbooks(CsvName)
'---------------------------
' Nombre de lignes dans le fichier CSV
'---------------------------
  Nbl = Derniere_Ligne(ActiveSheet.Name)
'---------------------------
' > Boucle sur les lignes
' + Incrementation compteur
' + recopie des lignes
'---------------------------
 For l = 1 To Nbl
    If compteur = nblMAX Then
     'creation classeur
        Workbooks.Add
        Set cls2 = ActiveWorkbook
        compteur = 1
    End If
    'recopie de la ligne
     cls.Activate
     ActiveSheet.Rows(l).Copy
     cls2.Activate
     Rows(compteur).Select
     ActiveSheet.Paste
     
    'on incrémente le compteur
    compteur = compteur + 1
 Next
  
End Sub

Function Derniere_Ligne(Nom_Feuille As String) As Long 
 Sheets(Nom_Feuille).Activate
 Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'pour les lignes
End Function



Il te reste à enregistrer les fichiers ainsi créés et à les fermer automatiquement...

Mais là.. je te laisse chercher un peu.. le plus "dur" est fait.



Cordialement,
Jordane