Problème inversion date EXCEL (+ conversion csv)

Résolu
Bonjour,

voilà mon problème :
Excel a un problème de dates, ok.

J'ai une macro qui m'exporte un fichier Excel en csv automatiquement (après avoir fait pleins de trucs dessus).
Mon problème est que ma macro qui travaille mes données est lourde et qu'elle n'est pas parfaitement adaptée à tous les fichiers sur lesquels je travaille (je peux pas faire mieux, je suis pas un pro en vba). Bref.
Dans mon fichier CSV j'ai une date en 2ème colonne, qui doit être sous format "yyyy-mm-dd". Ca c'est ok. Sauf que niais que je suis, dans la joie j'ai fait toutes les exportations en 3h et quelques, et là : mes mois et mes jours sont inversés 4 lignes sur 5...

Personne ne sait comment on stoppe ça ? J'en peux plus de ce problème.

Mon code de conversion de date + exportation en csv:

Dim newWS As Worksheet 'Fait référence à la feuille a_extraire qui servira à la création du fichier csv
Dim directory As String '[/contents/234-cvs-introduction Répertoire de travail]
Dim nom_fichier As String 'Nom du fichier csv
    Dim nbRow_x As Integer 'Nombre de lignes à exporter
    Dim nbCol_x As Integer 'Nombre de colonnes à exporter
    Dim Plage As Object, oL As Object, oC As Object, [/contents/452-fichier-tmp Tmp] As String, Sep$ 'Variables servant à la création du fichier csv



With newWS 'Conversion de la date au format aaaa-mm-jj
        .Columns("B:B").NumberFormatLocal = "aaaa-mm-jj;@"
        .Columns("B:B").FormulaLocal = Columns("B:B").Value
    End With
    
    '_____________________________________________________________
    
    '-----------------------Création du fichier CSV--------------------
    
    nbRow_x = newWS.UsedRange.Rows.Count 'Nombre de lignes de la feuille a_exporter
    nbCol_x = newWS.UsedRange.Columns.Count 'Nombre de colonnes de la feuille a_exporter
    nom_fichier = directory & "\csv\CSV_" & Application.Workbooks.Item(1).Name & ".csv" 'Nom du fichier créé de facon auto
    Sep = ";"
   
    Set Plage = newWS.Range(newWS.Cells(1, 1), newWS.Cells(nbRow_x, nbCol_x)) 'Sélection de la plage à exporter

    
    'Ecriture du csv
    Open nom_fichier 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
    MsgBox "Exportation au format .csv réussie"


EDIT: Précision du langage dans la coloration syntaxique.

1 réponse

  1. Bonjour,

    lignes a supprimer:
    With newWS 'Conversion de la date au format aaaa-mm-jj
            .Columns("B:B").NumberFormatLocal = "aaaa-mm-jj;@"
            .Columns("B:B").FormulaLocal = Columns("B:B").Value
        End With


    code pour ecriture fichier CSV:
        'Ecriture du csv
        Open nom_fichier For Output As #1
        
        For Each oL In Plage.Rows
            TMP = ""
            N_Col = 1
            For Each oC In oL.Cells
                If N_Col <> 2 Then
                    TMP = TMP & CStr(oC) & Sep
                Else
                    'formatage date:aaaa-mm-jj
                    DatC = Right(oC, 4) & "-" & Mid(oC, 4, 2) & "-" & Left(oC, 2)
                    TMP = TMP & DatC & Sep
                End If
                N_Col = N_Col + 1
            Next oC
            Write #1, TMP
        Next oL
        Close
        MsgBox "Exportation au format .csv réussie"
    


    A+
    0
    1. Super ! Mais par contre ça me donne des lignes entre double côtes...
      Exemple : "10-S-P1;2014-01-06;2;"
      Comment je les enlève ? Parce que sur l'ancien code je ne les avais pas...
      0
    2. @cruxiferBonjour,

      Sub conv_csv()
          Dim TMP As String, DatC As String
          
          Close
          With Worksheets("feuil1")
              nbRow_x = .UsedRange.Rows.Count 'Nombre de lignes de la feuille a_exporter
              nbCol_x = .UsedRange.Columns.Count 'Nombre de colonnes de la feuille a_exporter
              nom_fichier = "D:\_ACSV\test_date.csv"
              Sep = ";"
              Set Plage = .Range(.Cells(1, 1), .Cells(nbRow_x, nbCol_x)) 'Sélection de la plage à exporter
          End With
              
          '-----------------------Création du fichier CSV--------------------
          'Ecriture du csv
          Open nom_fichier For Output As #1
          
          For Each oL In Plage.Rows
              TMP = ""
              N_Col = 1
              For Each oC In oL.Cells
                  If N_Col <> 2 Then
                      TMP = TMP & CStr(oC) & Sep
                  Else
                      DatC = Right(oC, 4) & "-" & Mid(oC, 4, 2) & "-" & Left(oC, 4)
                      TMP = TMP & DatC & Sep
                  End If
                  N_Col = N_Col + 1
              Next oC
              Print #1, TMP
              'Write #1, TMP
          Next oL
          Close
          MsgBox "Exportation au format .csv réussie"
      End Sub
      0