Microsoft 365 Comment enregistrer chaque ligne en tant que fichier texte dans Excel?

floflo12

XLDnaute Nouveau
Bonjour tous le monde?

Voilà une question « simple » je pense mais j’avoue que je bloque…Comment enregistrer chaque ligne en tant que fichier texte dans Excel?
Voilà l’exemple type sur Excel:

A B C E. F. G. H. I.
1 1 FR ds grec 94 thé vente. Ok
2 2. FR. Me ita. 62 thé vente Ok
3 3. FR. Ds. Grec 66 thé vente ok

Je veux un export automatique de mes 27000 lignes en texte ou csv (le plus simple) répartis comme ceci:

1.txt ( le fichier texte contient Fr,ds,grec,94…)

J’essaie de vous faire par de mon fichier dans la semaine..! Un grand merci encore pour votre temps et votre énergie!! 🙏🙏
 
Solution
Bonjour floflo12, ChTi160, le forum,
Ah oui c’est chaud! Mais on peut le tenter non?
Ben oui, voyez le fichier zippé joint et cette macro :
VB:
Sub FichiersCSV()
Dim t, chemin$, i%, fichier$, x%
t = Timer
chemin = ThisWorkbook.Path & "\Fichiers CSV\"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin
With [A1].CurrentRegion
    For i = 1 To .Rows.Count
        fichier = chemin & Format(i, "00000") & ".csv"
        x = FreeFile
        Open fichier For Output As #x 'ouverture en écriture séquentielle
        Print #x, Join(Application.Transpose(Application.Transpose(.Rows(i))), ";")
        Close #x
    Next
End With
MsgBox Format(i - 1, "#,##0") & " fichiers CSV créés en " & Format(Timer - t, "0.00 \s")
End Sub
Chez moi les...

floflo12

XLDnaute Nouveau
Bonjour floflo12, ChTi160, le forum,

Ben oui, voyez le fichier zippé joint et cette macro :
VB:
Sub FichiersCSV()
Dim t, chemin$, i%, fichier$, x%
t = Timer
chemin = ThisWorkbook.Path & "\Fichiers CSV\"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin
With [A1].CurrentRegion
    For i = 1 To .Rows.Count
        fichier = chemin & Format(i, "00000") & ".csv"
        x = FreeFile
        Open fichier For Output As #x 'ouverture en écriture séquentielle
        Print #x, Join(Application.Transpose(Application.Transpose(.Rows(i))), ";")
        Close #x
    Next
End With
MsgBox Format(i - 1, "#,##0") & " fichiers CSV créés en " & Format(Timer - t, "0.00 \s")
End Sub
Chez moi les 27 000 fichiers CSV sont créés en 4,7 secondes seulement !

A+
Pour être précis j’ai 29459 lignes comprenant 7 infos par ligne… Ça change quelques choses à la ligne de code ou pas?
 

jurassic pork

XLDnaute Occasionnel
Hello,
ah non une fois suffit! On recommence pas tout… le fichier d’origine ne bougera plus sinon je m’en sors pas… les fichiers sont numéroté de 1 à 27000 donc juste un contrôle F et je peux réutiliser mon fichier sans refaire un export..
je ne vois pas toujours très bien à quoi vont te servir tous ces fichiers alors que tu as les infos dans ton fichier Excel ? et pourquoi pas un seul csv avec tout dedans ? 🤔
Ami calmant, J.P
 

floflo12

XLDnaute Nouveau
Bonjour floflo12, ChTi160, le forum,

Ben oui, voyez le fichier zippé joint et cette macro :
VB:
Sub FichiersCSV()
Dim t, chemin$, i%, fichier$, x%
t = Timer
chemin = ThisWorkbook.Path & "\Fichiers CSV\"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin
With [A1].CurrentRegion
    For i = 1 To .Rows.Count
        fichier = chemin & Format(i, "00000") & ".csv"
        x = FreeFile
        Open fichier For Output As #x 'ouverture en écriture séquentielle
        Print #x, Join(Application.Transpose(Application.Transpose(.Rows(i))), ";")
        Close #x
    Next
End With
MsgBox Format(i - 1, "#,##0") & " fichiers CSV créés en " & Format(Timer - t, "0.00 \s")
End Sub
Chez moi les 27 000 fichiers CSV sont créés en 4,7 secondes seulement !

A+
arfff!! 27 secondes...
Mais bon j'ai le droit à un 2eme essaie car il y a dans la vba le 1er chiffre et j'en ai pas besoin..( il est déjà dans le nom du fichier..) je peux te demander juste quel modification faire stp?
En tout cas merci pour tout!
 

Franc58

XLDnaute Occasionnel
Pour le fun, j'ai codé une nouvelle macro avec tableau en mémoire, j'abaisse mon temps à 4.2 secondes :)

VB:
Sub FichiersCSV()
    Dim t As Double, chemin As String, i As Long, fichier As String, x As Integer
    Dim tableau As Variant, ligne As String
    Dim j As Long, nbColonnes As Long
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    t = Timer
    
    chemin = ThisWorkbook.Path & "\Fichiers CSV\"
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin
    
    tableau = [A1].CurrentRegion.Value
    nbColonnes = UBound(tableau, 2)
    
    For i = 1 To UBound(tableau, 1)
        fichier = chemin & Format(i, "00000") & ".csv"
        ligne = ""
        
        For j = 1 To nbColonnes
            ligne = ligne & tableau(i, j) & IIf(j < nbColonnes, ";", "")
        Next j
        
        x = FreeFile
        Open fichier For Output As #x
        Print #x, ligne
        Close #x
    Next i
    
    MsgBox Format(i - 1, "#,##0") & " fichiers CSV créés en " & Format(Timer - t, "0.00 \s")
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Oui, j'utilise un disque dur, mon PC a plus de 15 ans, mais surtout j'ai toujours eu des problèmes de lenteur au niveau des disques durs.

Je suis en RAID1 au niveau du BIOS de la CM, pour l'OS (un HDD SATA2 en 5400 et un SSD en SATA2), et aussi pour les données (deux HDD SATA2 en 5400, mais la taille des blocs n'est pas la même me semble-t-il...).

Les benchs sont à peu près corrects, mais à l'utilisation je ne dépasse jamais les 30 Mo/s, et plus généralement je tourne à 8 ou 10 Mo/s.
 
Dernière édition:

Statistiques des forums

Discussions
313 902
Messages
2 103 391
Membres
108 631
dernier inscrit
tarek.kanaan