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