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
22vers-csv-utf8.xlsm (25.77 Ko)

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!

Rechercher des sujets similaires à "format dates heures macro export csv"