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 SubBonjour,
Et ainsi ?
ActiveWorkbook.SaveAs Filename:="E:\Commandes_du_30_06.csv", FileFormat:= xlCSV, CreateBackup:=False, Local:=TrueBonjour,
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 !!!