Problème inversion date EXCEL (+ conversion csv)

Résolu
cruxifer Messages postés 16 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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. cruxifer Messages postés 16 Statut Membre
       
      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
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > cruxifer Messages postés 16 Statut Membre
         
        Bonjour,

        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