Générer un fichier CSV à partir d'une plage
Bonjour à tous,
J'ai besoin de votre aide pour perfectionner une Macro VBA
Mon besoin initial est le suivant :
Générer un fichier CSV à partir d'une plage (L5:P) en respectant la mise en forme des données et sans intégrer les lignes vides.
Je souhaiterai également pouvoir choisir le chemin de mon enregistrement.
J'ai commencé à travailler avec le code ci-dessous (module 3 : test) mais il ne répond que partiellement à mon besoin.
Sub Test()
Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$
Sep = ";"
Set Plage = ActiveSheet.Range("L5:P" & ActiveSheet.Range("A65500").End(xlUp).Row)
Open "OWIM" & "_" & "COMMANDE" & "_" & "n°" & "_" & Range("I1") & "_" & Year(Date) & "_" & Right("0" & Month(Date), 2) & "_" & Right("0" & Day(Date), 2) & ".csv" For Output As #1
For Each oL In Plage.Rows
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next
Print #1, Tmp
Next
Close
End SubJe suis novice sur la rédaction du VBA, votre aide me sera précieuse 😇 (vous trouverez également le fichier en PJ)
Merci par avance
Bonjour Corbani et
Merci de mettre le code entre balises quand vous en donnez un
Sinon pour ce que vous demandez, vous pouvez essayer ceci
Sub Test()
Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$
Dim sNomFic As String, sPath As String, sTmp As String
' Préparer le nom du fichier
sNomFic = "OWIM" & "_" & "COMMANDE" & "_" & "n°" & "_" & Range("I1") & "_" & Year(Date) & "_" & Right("0" & Month(Date), 2) & "_" & Right("0" & Day(Date), 2) & ".csv"
' Confirmer le nom et chemin du fichier
sTmp = Application.GetSaveAsFilename(ThisWorkbook.Path & "\" & sNomFic, FileFilter:="Fichier CSV (*.csv), *csv", Title:="CHOIX d'ENREGISTREMENT")
' Si annulation
If sTmp = "Faux" Then Exit Sub
' Sinon récupérer le chemin d'accès
sPath = Left(sTmp, InStrRev(sTmp, "\"))
'
Sep = ";"
Set Plage = ActiveSheet.Range("L5:P" & ActiveSheet.Range("A65500").End(xlUp).Row)
Open sPath & sNomFic For Output As #1
For Each oL In Plage.Rows
' Si la ligne est vide on passe à la suivante
If oL.Cells(1) = "" Then GoTo NextoL
' Ou on sort
'If oL.Cells(1) = "" Then Exit For
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next oC
Print #1, Tmp
NextoL:
Next oL
Close
End SubA+
Bonjour Bruno M45,
Parfait ça fonctionne !!!!
Merci beaucoup pour ton aide, je note pour mes demandes de bien intégrer la fonction code dans mes demandes.
Bonne journée et à bientôt
Bonjour à tous,
J'ai une nouvelle fois besoin de votre aide 😇 pour perfectionner une macro.
Ma problématique est la suivante :
Le fichier CSV qui est généré me permet d'importer des données de commande directement dans un autre logiciel interne.
Quand j'importe mon fichier CSV il présente une anomalie sur la date de livraison avec un ";" après celle-ci comme s'il appliquait un nouveau séparateur avant une celulle vide alors qu'il ne récupère la plage que de la colonne P à T.
J'aimerai que le séparateur ne soit pas appliqué après la colonne T pour éviter une anomalie (cf.photo ci-dessous)
Je vous joins le code utilisé ainsi que le fichier :
Sub Test()
Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$
Dim sNomFic As String, sPath As String, sTmp As String
' Préparer le nom du fichier
sNomFic = "OWIM" & "_" & "COMMANDE" & "_" & "n°" & "_" & Range("I1") & "_" & Year(Date) & "_" & Right("0" & Month(Date), 2) & "_" & Right("0" & Day(Date), 2) & ".csv"
' Confirmer le nom et chemin du fichier
sTmp = Application.GetSaveAsFilename(ThisWorkbook.Path & "\" & sNomFic, FileFilter:="Fichier CSV (*.csv), *csv", Title:="CHOIX d'ENREGISTREMENT")
' Si annulation
If sTmp = "Faux" Then Exit Sub
' Sinon récupérer le chemin d'accès
sPath = Left(sTmp, InStrRev(sTmp, "\"))
'
Sep = ";"
Set Plage = ActiveSheet.Range("L5:P" & ActiveSheet.Range("A65500").End(xlUp).Row)
Open sPath & sNomFic For Output As #1
For Each oL In Plage.Rows
' Si la ligne est vide on passe à la suivante
If oL.Cells(1) = "" Then GoTo NextoL
' Ou on sort
'If oL.Cells(1) = "" Then Exit For
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next oC
Print #1, Tmp
NextoL:
Next oL
Close
End Sub
Merci par avance pour votre aide 😊
Bonne fin de journée
Bonjour à tous,
Après quelques recherches j'ai trouvé la solution, je vous joins le code si ça peut aider à l'avenir.
Merci à tous pour le temps accordé à la lecture du post.
Excellente journée.
Sub Test()
Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$
Dim sNomFic As String, sPath As String, sTmp As String
' Préparer le nom du fichier
sNomFic = "LOTUS" & "_" & "MARQUES" & "_" & "COMMANDE" & "_" & "n°" & "_" & Range("I1") & "_" & Year(Date) & "_" & Right("0" & Month(Date), 2) & "_" & Right("0" & Day(Date), 2) & ".csv"
' Confirmer le nom et chemin du fichier
sTmp = Application.GetSaveAsFilename(ThisWorkbook.Path & "\" & sNomFic, FileFilter:="Fichier CSV (*.csv), *csv", Title:="CHOIX d'ENREGISTREMENT")
' Si annulation
If sTmp = "Faux" Then Exit Sub
' Sinon récupérer le chemin d'accès
sPath = Left(sTmp, InStrRev(sTmp, "\"))
'
Sep = ";"
Set Plage = ActiveSheet.Range("P4:T" & ActiveSheet.Range("A65500").End(xlUp).Row)
Open sPath & sNomFic For Output As #1
For Each oL In Plage.Rows
' Si la ligne est vide on passe à la suivante
If oL.Cells(1) = "" Then GoTo NextoL
' Ou on sort
'If oL.Cells(1) = "" Then Exit For
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next oC
Print #1, Mid(Tmp, 1, Len(Tmp) - 1)
NextoL:
Next oL
Close
End Sub