Modifier un fichier CSV via Macro

Bonjour à tous,

Pour mon travail, j'ai un fichier CSV (MAP_Trame_Exemple.csv) dans lequel je dois importer des données d'un autre fichier manuellement et le sauvegarder avec la date du jour. J'insère ensuite ce nouveau fichier CSV dans un logiciel.
Étant donné, qu'il peut y avoir plusieurs centaines de données à taper, je cherche à automatiser la procédure.

Le fichier CSV de base que je possède (MAP_Trame_Exemple)est bien présenté : les infos sont bien reparties dans les colonnes.
En colonne A, le nom des articles et en colonne B,C,D,E des quantités.

J'arrive via ma macro à importer de ma base de données mes quantités dans le fichier CSV en colonnes B,C,D,E,F.
Mais lorsque dans ma macro, je veux enregistrer le fichier CSV sous le nom "Commandes_du_date" avec la date du jour, le fichier s'enregistre mais les données ne sont plus du tout présentées correctement. J'ai en colonne A, toutes mes données séparées par des virgules.

Y a t'il une solution pour enregistrer correctement mon fichier et qu'il soit présenté exactement comme le fichier MAP_Tram_Exemple ?

En PJ le fichier de base MAP_Trame_Exemple.csv et le fichier que cela me donne Commandes_du_30_06.csv

Voici mon code. Je ne suis pas très à l'aise en VBA et suis bloqué sur la dernière partie :

Sub Créer_CSV()

'On se met sur le bon onglet
Sheets("Fichier CSV").Activate

Set Plage1 = Range("A1:G500")
Plage1.Copy

'On récupère le chemin et le nom du fichier à ouvrir
Sheets("Page Principale").Activate
CheminFichierCSV = Range("E22").Value
NomFichierCSV = Range("E21").Value

NomCompletFichierCSV = CheminFichierCSV & NomFichierCSV

'On ouvre le fichier CSV
Workbooks.Open Filename:=NomCompletFichierCSV


'On copie les données sur le fichier CSV
Sheets("MAP_TRAME_EXEMPLE").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.CutCopyMode = False

'On enregistre le fichier CSV avec la date du jour
Windows("MAP_TRAME_EXEMPLE.csv").Activate
ActiveWorkbook.SaveAs Filename:="E:\Commandes_du_30_06.csv", FileFormat:= _
xlCSV, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close

End Sub

Merci de votre aide.

Bonjour,

Et en remplaçant FileFormat:= xlCSV par FileFormat:=xlCSVMSDOS, qu'est-ce que ça dit?

Cdlt

Bonjour à vous deux.

Quelques remarques si tu le permets :

- indente ton code, il sera plus lisible.
- tu utilises la commande .Activate à tout bout de champ, probablement pour te rassurer. Dans ce type de code, tu n'en as jamais besoin. Il suffit de déclarer les feuilles en temps qu'objets (Set).
- tu sauvegardes ton travail à la fin sur la racine du lecteur "E:\". Ce n'est pas du tout recommandé pour des raisons un peu trop complexes à expliquer. Il est très facile de créer un dossier sur le lecteur E:\ s'il n'existe pas encore.
- enfin, le plus important : prends l'habitude de toujours déclarer tes variables avant de les utiliser (Option Explicit). Pour cela, paramètre ton interface VBE dans ce sens dans les options de l'éditeur.

Essaye ceci :

Option Explicit

Sub Créer_CSV()
    Dim Plage As Range, CheminFichierCSV As String, saveFile As String
    Dim NomFichierCSV As String, NomCompletFichierCSV As String
    Dim wS1 As Worksheet, wS2 As Worksheet, wS3 As Worksheet
    Dim wB As Workbook

    Set wS1 = Sheets("Page Principale")
    Set wS2 = Sheets("Fichier CSV")

    'On récupère le chemin et le nom du fichier à ouvrir
    CheminFichierCSV = wS1.Range("E22").Value
    NomFichierCSV = wS1.Range("E21").Value
    ' On suppose que l'antislash a été mis à la fin du chemin
    NomCompletFichierCSV = CheminFichierCSV & NomFichierCSV

    'On ouvre le modèle (map-trame-exemple.csv))
    Set wB = Workbooks.Open(Filename:=NomCompletFichierCSV)
    Set wS3 = wB.Sheets("map-trame-exemple")

    'On copie les données dans le modèle
    Set Plage = wS2.Range("A1:G500")
    Plage.Copy Destination:=wS3.Range("A1")
    Application.CutCopyMode = False
    saveFile = "commandes-du-" & Format(Date, "dd-mm") & ".csv"

    'On enregistre le fichier CSV avec la date du jour
    wB.SaveAs Filename:="E:\" & saveFile & ".csv", FileFormat:= _
    xlCSV, CreateBackup:=False
    ' On referme le modèle sans le modifier
    wB.Close SaveChanges:=False
End Sub

Bonjour,

Et ainsi ?

ActiveWorkbook.SaveAs Filename:="E:\Commandes_du_30_06.csv", FileFormat:= xlCSV, CreateBackup:=False, Local:=True

Bonjour,

Merci pour votre aide, avec la solution de cousinhb29, ça fonctionne parfaitement !!

Maintenant, je vais modifier ma macro en utilisant les conseils de Optimix :)

C'est top ! Ça va me faciliter la vie !!!

Rechercher des sujets similaires à "modifier fichier csv via macro"