Format dates et heures dans macro export CSV
Bonjour,
Je souhaite réaliser l'export de feuilles excel au format CSV (sep="|" et encodage UTF-8).Jusque là tout va bien, j'ai une belle macro (grâce à ce blog qui m'a bien aidée!).
Dans mon fichier excel, j'ai un champ "Date" et un champ "Heure", au format dd/mm/yyyy et hh:mm.
Or, lorsque la macro "fabrique" le fichier CSV, ces ne sont plus respectés (en ouvrant le CSV, le format date est dd/mm/yy et heure dd:mm:00) . Pouvez-vous m'aider pour "imposer" ces formats dans ma macro?
Je vous en remercie par avance (je débute)!
Caroline
Option Explicit
Public Const adModeReadWrite = 3
Public Const adTypeBinary = 1
Public Const adTypeText = 2
Sub export_Faits()
Dim Plage As Range, oL As Range, Oc As Range, Tmp As String
Set Plage = Worksheets("Faits (remplissage automatique)").Range("A1").CurrentRegion
Open ThisWorkbook.Path & "\" & "Faits" & "_" & Format(Now, "dd_mm_yyyy") & ".csv" For Output As #1
For Each oL In Plage.Rows
Tmp = ""
For Each Oc In oL.Cells
Tmp = Tmp & CStr(Oc.Text) & "|"
Next
Print #1, Utf8_Encode(Tmp)
Next
Close
End Sub
Public Function Utf8_Encode(ByRef Txt As String) As String
Dim Data() As Byte, S As String, i As Long
With CreateObject("ADODB.Stream") ' init stream
.Charset = "utf-8"
.Mode = adModeReadWrite
.Type = adTypeText
.Open
.WriteText Txt
.Flush
.Position = 0
.Type = adTypeBinary
.Read 3
Data = .Read()
.Close
End With
For i = 0 To UBound(Data)
S = S & Chr(Data(i))
Next i
Utf8_Encode = S
End Function
Bonjour,
On peut forcer le format de certaines colonnes. Par exemple, ici avec des dates en colonne 2 et des heures en colonne 3 :
For Each oL In Plage.Rows
Tmp = ""
For Each Oc In oL.Cells
Select Case Oc.Column
Case 2: Tmp = Tmp & Format(Oc.Value, "dd/mm/yyyy") & "|"
Case 3: Tmp = Tmp & Format(Oc.Value, "hh:nn") & "|"
Case Else: Tmp = Tmp & CStr(Oc.Text) & "|"
End Select
Next
Print #1, Utf8_Encode(Tmp)
Next
Je vous remercie pour votre réponse rapide!
J'ai cependant un petit problème: je dois importer le fichier csv généré par la macro dans un outil professionnel. Et cet import ne se fait pas sous le motif que les format de date et d'heure ne sont pas corrects : pour mon outil le format de date du fichier CSV détecté est dd/mm/yy et celui de l'heure hh:mm:ss , et ceci malgré votre programme.
Voyez-vous d'où peut venir le problème? J'avoue être paumée...
Merci d'avance pour votre aide précieuse!
Bonjour,
J'avais peut être mal compris la demande. Il me semble qu'il suffit de modifier le format souhaité comme ceci =>
Select Case Oc.Column
Case 2: Tmp = Tmp & Format(Oc.Value, "dd/mm/yy") & "|"
Case 3: Tmp = Tmp & Format(Oc.Value, "hh:nn:ss") & "|"
Case Else: Tmp = Tmp & CStr(Oc.Text) & "|"
End Select
(sous réserve des bons n° de colonne date et heure de vos fichiers ... ici 2 et 3)
Bonjour,
Non, non vous aviez parfaitement compris ma demande initiale.
Je n'avais pas bien adapté votre programme (n° de colonne), du coup je n'obtenais pas ce qu'il fallait.
Donc un grand merci pour votre aide, grâce à vous je gagne beaucoup de temps!