ouvrir fichier csv : gestion des dates

jhofman

XLDnaute Occasionnel
bonjour

j'ai déjà débatu sur ce sujet
il m'est tres difficile de bien interpréter des dates venant d'un fichiers CSV ouvert via un module VBA dans EXCEL. parfois le 12 mai est reconnu come 5 dec parfois comme 12 mai (12/05<>05/12)
le procédure ci-dessous est ok dès la seconde utilisation après ouverture du fichier principal mais pas d'emblé !
celui qui pourra m'orienté sera un SUPER CHEF !
(la solution détournée que je vois consite à utiliser du texte au lieu des dates exemple AAAAMMJJ en format texte mais pas terrible)
Merci
voici le code


Code:
Sub OuvrirCSV()
Dim DialOuvr As FileDialog, Rep, Chemin As String
'Windows("REPORTING_PARC.xls").Activate
Sheets("PARC").Select

Set DialOuvr = Application.FileDialog(msoFileDialogOpen)
DialOuvr.Filters.Clear
DialOuvr.Filters.Add "Fichiers CSV", "*.csv", 1
DialOuvr.AllowMultiSelect = False
DialOuvr.Title = "Ouverture du fichier CSV"
DialOuvr.InitialView = msoFileDialogViewList
'DialOuvr.InitialFileName = "C:\Mes Fichiers CSV\"
Rep = DialOuvr.Show
    If Rep = 0 Then
        MsgBox "Opération annulée"
        Exit Sub
    End If
Chemin = DialOuvr.SelectedItems(1)
'-----------------------
' etape1
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Chemin, Destination:=Range("A1"))
    .Name = "test"
    .AdjustColumnWidth = False
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .Refresh BackgroundQuery:=False
    .TextFileCommaDelimiter = False
    .TextFileSemicolonDelimiter = True
    
End With
'-------
' etape2
Sheets("PARC").Select
Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        
Columns("B:B").NumberFormat = "0"
End Sub

piste : des fois l'import se fait dans la première étape des fois à la seconde !!
 

tototiti2008

XLDnaute Barbatruc
Re : ouvrir fichier csv : gestion des dates

Bonjour jhofman,

tiens, ce code me dit quelque chose (en partie au moins) ;)
dans l'étape 1, juste avant le End With, il ne manque pas quelque chose comme :

.Refresh
.Delete

??

pas sûr que ça résolve ton problème de dates.
 

mromain

XLDnaute Barbatruc
Re : ouvrir fichier csv : gestion des dates

bonjour jhofman, tototiti2008,

si le nombre de colonnes de ton fichier csv ne change pas, on peut faire une macro où on "parse" la date à l'importation des données.
si ça t'intéresse, envoie un fichier csv "modèle".

sinon, personnellement, je trouve que traiter les dates en tant que texte "yyyymmdd" n'a que des avantages :
- les tri fonctionnent,
- tu peux les "parser" en dates si besoin.

a+
 

jhofman

XLDnaute Occasionnel
Re : ouvrir fichier csv : gestion des dates

bonjour mromain et tototiti2008


tototiti2008 les commandes

.Refresh
.Delete

me gènent plus qu'autre chose : les colonnes 2 et suivantes en sont plus alimentées !

si pas de solution, je demande en effet le format texte : YYYYMMAA
Merci de voter aide
 

Pièces jointes

  • EXTRAIT_20090514.zip
    442 bytes · Affichages: 33

mromain

XLDnaute Barbatruc
Re : ouvrir fichier csv : gestion des dates

re,

je te propose ce code, il a l'air de fonctionner, tu me diras :
Code:
Sub CsvToXls()
Dim myFso As Object, csvFile As Object, csvLine As String, tabStr() As String, _
    csvFilePath As String, csvDelimiter As String, shtDest As Worksheet, numLigne _
    As Integer, numColonne As Integer, dayInt As Integer, monthInt As Integer, _
    yearInt As Integer

' --- initialiser les variables de l'extraction ----
csvFilePath = "E:\aMiki\XLS\test\EXTRAIT_20090514.csv"
csvDelimiter = ";"
Set shtDest = ThisWorkbook.Sheets("Feuil1")
' --------------------------------------------------

' ouvrer le fichier CSV
Set myFso = CreateObject("Scripting.FileSystemObject")
Set csvFile = myFso.OpenTextFile(csvFilePath)

numLigne = 1

' tant qu'on est pas à la fin du fichier CSV
While Not csvFile.AtEndOfStream
    ' lire la ligne suivante
    csvLine = csvFile.ReadLine
    ' "spliter" la ligne
    tabStr = Split(csvLine, csvDelimiter)
    ' boucler sur chaque élément de la ligne
    For numColonne = LBound(tabStr) + 1 To UBound(tabStr) + 1
        ' si on est sur une des colonnes de dates (2, 8 ou 11)
        If numColonne = 2 Or numColonne = 8 Or numColonne = 11 Then
            ' si la date du fichier csv n'est pas vide
            If tabStr(numColonne - 1) <> vbNullString Then
                ' reporter la valeur "parsée" de la date
                On Error Resume Next
                ' récupérer le jour
                dayInt = CInt(Mid(tabStr(numColonne - 1), 1, 2))
                ' récupérer le mois
                monthInt = CInt(Mid(tabStr(numColonne - 1), 4, 2))
                ' récupérer l'année
                yearInt = CInt(Mid(tabStr(numColonne - 1), 7, 4))
                shtDest.Cells(numLigne, numColonne).Value = DateSerial(yearInt, monthInt, dayInt)
                On Error GoTo 0
            End If
        ' sinon
        Else
            ' reporter la valeur de l'élément sur la feuille
            shtDest.Cells(numLigne, numColonne).Value = tabStr(numColonne - 1)
        End If
    Next numColonne
    ' se décaler d'une ligne
    numLigne = numLigne + 1
Wend

End Sub

a+
 

jhofman

XLDnaute Occasionnel
Re : ouvrir fichier csv : gestion des dates

Mromain

oui je ne travail qu'avec ce mode.

je crois avaoir trouvé :

le problème sur les dates venait que je faisais pour appliquer un filtre ensuite :

Columns("B:B").NumberFormat = "0"
au lieu de
Columns("B:B").NumberFormat = "General"qui a l'air de bien mieux fonctionner avec les dates !

Merci à tous
josé
 

Discussions similaires

Statistiques des forums

Discussions
312 370
Messages
2 087 689
Membres
103 639
dernier inscrit
NIEMASAFI