Google Groupes n'accepte plus les nouveaux posts ni abonnements Usenet. Les contenus de l'historique resteront visibles.

Problème de lecture sur fichiers .csv

247 vues
Accéder directement au premier message non lu

Erick GOLIARD

non lue,
21 août 2003, 04:46:4921/08/2003
à
Excel 97/2000 :
Lorsque depuis Excel j'ouvre un fichier .csv qui contient
une date (JJ/MM/AAAA), Excel en recopnnaissant le format
date intervertit le jour et le mois si c'est possible (càd
jour <=12) !
Si le jour est > 12 Excel ne change rien et la format de
la cellule est standard !

Avez-vous constaté ce problème ?
Avez-vous une solution ?
Merci de votre aide.

Frédéric Sigonneau

non lue,
28 août 2003, 04:52:2628/08/2003
à
Bonjour,

Plusieurs méthodes pour contourner ce problème (la méthode 3 apporte une
amélioration à la première procédure) :

'========================================= 1

'ouvrir un fichier texte contenant des dates en évitant leur conversion
'automatique au format américain (2 méthodes)

Sub test()
Dim fich$
fich = "d:\fsDatas\TestAvecDates.txt"
' OuvrirTxt fich
OpenTxtAvecDates fich
End Sub

Sub OpenTxtAvecDates(NomFichier$, Optional Sep$ = ";")
'méthode utilisée : récupérer le numéro de série des dates
Dim Wbk As Workbook
Dim derLi&, i&, Arr, cell As Range

Set Wbk = Workbooks.Open(NomFichier)
With Wbk.Sheets(1)
derLi = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To derLi
Arr = Split(.Cells(i, 1).Text, Sep)
For j = LBound(Arr) To UBound(Arr) - 1
If IsDate(Arr(j)) Then Arr(j) = CLng(DateValue(Arr(j))) & "__"
Next
.Cells(i, 1).Value = Join(Arr, Sep)
Next
.Columns(1).TextToColumns Range("A1"), , , False, , True
For Each cell In .UsedRange
If Right(cell.Value, 2) = "__" Then
cell.Value = CDate(Split(cell.Text, "__")(0))
End If
Next
End With

End Sub 'fs

'============================================= 2

'utiliser le paramètre FieldInfo pour forcer le format de dates
'd'une colonne (la colonne ne doit contenir que des dates..)
Sub OuvrirTxt(NomFichier$)
Dim Wbk As Workbook
Set Wbk = Workbooks.Open(NomFichier)
Wbk.Sheets(1).Columns(1).TextToColumns _
Range("A1"), , , False, , True, FieldInfo:=Array(2, xlDMYFormat)
'(ici, la colonne de dates est la colonne 2)
End Sub

'============================================== 3

Sub test()
Dim fich$
fich = "D:\fsdatas\ctest.txt"
OpenTxtAvecDates_v2 fich, Chr(9)
End Sub

Sub OpenTxtAvecDates_v2(NomFichier$, Optional Sep$ = ";")
'permet d'ouvrir un fichier texte qui contient des dates
'en les restituant au format des paramètres régionaux locaux
'le mode d'ouverture du fichier texte contourne la conversion auto
'en colonnes lorsque le séparateur des données est le caractère
'de tabulation (qui fait échouer la méthode de la v1)
Dim derLi&, i&, j&, Arr, cell As Range, sText$

Open NomFichier For Input As #1
Do While Not EOF(1)
sText = ""
Line Input #1, sText
i = i + 1
Cells(i, 1).Value = sText
Loop
Close #1

With ActiveWorkbook.Sheets(1)
derLi = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To derLi
Arr = Split(.Cells(i, 1).Text, Sep)
For j = LBound(Arr) To UBound(Arr) ' - 1
If IsDate(Arr(j)) Then Arr(j) = CLng(DateValue(Arr(j))) & "__"
Next
.Cells(i, 1).Value = Join(Arr, Sep)
Next
.Columns(1).TextToColumns Range("A1"), , , False, , True
For Each cell In .UsedRange
If Right(cell.Value, 2) = "__" Then
cell.Value = CDate(Split(cell.Text, "__")(0))
End If
Next
End With

End Sub 'fs
'==========================

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Erick GOLIARD a écrit :

0 nouveau message