Avez-vous constaté ce problème ?
Avez-vous une solution ?
Merci de votre aide.
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 :