It appears Excel wrongfully uses comma as a separator, instead of semicolon. I have tried modifying the format option, as suggested by BigBen, but unsuccessfuly.
You could try the following code though. Definitely not the most elegant way to do it, but it seems to work.
Sub ImportData()
Dim Wkb As Workbook
Dim Wks As Worksheet
Dim MaxColumn As Long
Dim MaxRow As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim TmpStr As String
Dim TmpSplit() As String
Dim TmpArr() As String
Set Wkb = Workbooks.Open(Filename:="http://webstat.banque-france.fr/fr/downloadFile.do?id=5385698&exportType=csv")
Set Wks = Wkb.Sheets(1)
With Wks
MaxColumn = .UsedRange.Columns.Count
MaxRow = .UsedRange.Rows.Count
Application.Calculation = xlCalculationManual
'The TmpArr array is used to temporarily store records, and dimensionned according to the data size
ReDim TmpArr(1 To MaxRow, 1 To MaxColumn)
'For each row in imported data
For i = 1 To MaxRow
'Concatenate each column, with a comma inbetween
TmpStr = vbNullString
TmpStr = .Cells(i, 1)
For j = 2 To MaxColumn
TmpStr = TmpStr & "," & .Cells(i, j)
Next j
'Next, split the concatenated string and store in the TmpSplit array, which holds each value for the current record
TmpSplit = Split(TmpStr, ";")
'The TmpSplit array is then used to fill the TmpArr, which contains each record
For k = 0 To UBound(TmpSplit) - 1
TmpArr(i, k + 1) = TmpSplit(k)
Next k
Next i
'Finally, print the TmpArr in the current sheet. The range on which i print the record is dynamically dimensionned using the size of the TmpArr
.UsedRange.Clear
.Range("A1:" & .Cells(UBound(TmpArr, 1), UBound(TmpArr, 2)).Address) = TmpArr
Application.Calculation = xlCalculationAutomatic
End With
End Sub