Assembler des fichiers .csv

Bonjour,

J'importe tous les matins une dizaine de fichiers .csv provenant de boutiques différentes.

Je dois ensuite ouvrir chaque fichier avec excel et copier/coller manuellement les lignes de chaque fichier dans une nouvelle feuille Excel, les unes en dessous des autres, afin d'avoir au final un seul fichier.

C'est fastidieux et long, y a t'il un moyen de dire à Excel à travers une macro : "Ouvre tous ces fichiers, copies les lignes, colle les les unes en dessous des autres pour créer un seul fichier" ou " Assemble tous ces fichiers pour n'en faire qu'un seul" ?

Merci.

François

Bonjour françois,

Ça doit pouvoir se faire mais il faudrait que tu fournisses un bout d'au moins 2 de tes fichiers csv, nous dire dans quel(s) répertoire(s) se trouvent ces fichiers et dans quel fichier souhaites-tu rapatrier toutes les données.

Oui, bien sûr, les deux fichiers sont en pièce jointe.

Les réponses à tes questions :

Les fichiers se trouvent dans le répertoire : C:\Users\François\Desktop\CSV avant

Je rapatrierai les fichiers vers le fichier unique : C:\Users\François\Desktop\CSV après\fichierunique.csv

Quels sont les paramètres que tu utilises pour importer tes données ?

Car voici ce que j'ai lorsque j'ouvre ton fichier csv avec excel :

capture

En fait j'ouvre les fichiers bruts tel quel ( comme sur ta capture d'écran) et je copie ces lignes brutes les unes en dessous des autres pour faire un seul fichier. Ensuite j'ai une macro qui me permet de transformer tout ça en tableau excel classique.

Le but là c'est d'assembler les .csv brut. Une fois le fichier unique obtenu, je le met en forme avec la macro-pré-citée.

Re,

Appuie sur le bouton dans le fichier suivant :

1'342fichierunique.xlsm (17.06 Ko)

Ca maaaaarche !!

Merci et bravo

Je ne sais pas créer des macros complexes, peux tu me dire s'il te plait quel serait le code d'une macro qui permettrait, dans ce même fichier, de supprimer les lignes qui comportent le texte "Order ID" dans la colonne A ?

Quelque chose comme ça vite fait :

For i=1 to Range("a" & Rows.Count).End(xlUp).Row
if Range("a" & i) like "*Order ID*" Then Rows(i).Delete
Next i

Code à tester.

Ca marche aussi, merci

Penses tu que je peux coller cette macro dans la précedente que tu as crée pour le fichier ("importDonnées"), après le "Loop" ?

Ce qui donnerait :

Sub importDonnees()

Dim principal As ThisWorkbook

Dim repertoire As String, fichier$

Application.ScreenUpdating = False

Set principal = ThisWorkbook

repertoire = "C:\Users\François\Desktop\CSV avant\"

fichier = Dir(repertoire & "*.csv")

Do While fichier <> ""

Workbooks.Open (repertoire & fichier)

ActiveSheet.UsedRange.Copy Destination:=principal.Sheets(1).Range("a" & Rows.Count).End(xlUp).Offset(1)

ActiveWorkbook.Close

fichier = Dir

Loop

For i = 1 To Range("a" & Rows.Count).End(xlUp).Row

If Range("a" & i) Like "*Order ID*" Then Rows(i).Delete

Next i

End Sub

Ça devrait marcher ; à toi de tester ! N'oublie pas de déclarer la variable i (Dim i As Long)

vba-new a écrit :

Ça devrait marcher ; à toi de tester ! N'oublie pas de déclarer la variable i (Dim i As Long)

Ouh la la, qu'est ce que ça veut dire ?!

Je n'y connais rien en VBA, en fait comme je connais le php et le html, j'ai une logique d'assemblage de code et je pige à peu près le sens des blocs de code VBA mais je ne le lis pas ! Où dois je insérer ce Dim i As Long ? (encore merci pour ton aide !)

Tu le mets au début, juste en dessous de Sub ImportDonnees, vers les autres Dim .....

Exemple :

Sub importDonnees()
Dim i As Long
Dim principal As ThisWorkbook
Dim repertoire As String, fichier$
vba-new a écrit :

Tu le mets au début, juste en dessous de Sub ImportDonnees, vers les autres Dim .....

Exemple :

Sub importDonnees()
Dim i As Long
Dim principal As ThisWorkbook
Dim repertoire As String, fichier$

Ca marche, merciiiiii !


Hello !

N'y aurait il pas un petit bug dans le premier code - celui d'import des fichiers - car ce matin sur les dix fichiers importés il y en avait 3 qui étaient incomplets. C'est à dire qu'il leur manquait des lignes de produits (le client avait acheté 2 produits et seul le premier produit apparaissait, le second n'était pas présent)

Ah, tu parlais de ce post-là dans ton MP.

Peux-tu joindre un ou 2 des fichiers récalcitrants ? Peut-être que la structure est différente.


frisco75 a écrit :

C'est à dire qu'il leur manquait des lignes de produits (le client avait acheté 2 produits et seul le premier produit apparaissait, le second n'était pas présent)

C'est parce que le champs Order ID n'était pas renseigné lorsque plus d'un produit était acheté.

C'est corrigé avec la macro suivante :

Sub importDonnees()
    Dim principal As ThisWorkbook
    Dim repertoire As String, fichier$
    Dim c As Range
    Dim derlign As Long

    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = "C:\Users\François\Desktop\CSV avant\"
    fichier = Dir(repertoire & "*.csv")
    Do While fichier <> ""
        Set c = Cells.Find("*", , , , xlByRows, xlPrevious)
        If c Is Nothing Then derlign = 1 Else derlign = c.Row + 1
        Workbooks.Open repertoire & fichier
        ActiveSheet.UsedRange.Copy Destination:=principal.Sheets(1).Range("a" & derlign)
        ActiveWorkbook.Close
        fichier = Dir
    Loop
End Sub

Quel talent, ça marche ! Je verrais avec les fichiers de demain mais là avec ceux d'hier c'est impeccable.

Un grand merci à toi, je vais aller plus vite le matin maintenant

Bonjour,

Je me permet de revenir sur ce post pas tout jeune.

J'ai essayé votre macro dans le même contexte et j'ai un petit soucis. Les nombres décimaux remontent en nombres entiers. Ex 1414,82 devient 1415....

Auriez vous une idée de ce que je pourrais modifier dans votre macro ?

D'avance merci

Re-Bonjour,

En fait, lors de l'importation des fichiers CSV, c'est la virgule qui fait office de séparateur, pas le ";"...

J'ai cru comprendre que l'instruction "Open" est paramétrable pour séléctionner le séparateur, mais je ne connais pas la syntaxe...

Help me please

Rechercher des sujets similaires à "assembler fichiers csv"