J'ai lu attentivement le tutoriel de SilkyRoad : http://silkyroad.developpez.com/VBA/ClasseursFermes/

Et il fonctionne très bien, cependant, je me retrouve devant un cas particulier :
Un programme (Baan) me génère un fichier .xls qui n'en est pas un (c'est un fichier texte avec comme séparateur une tabulation)

Lorsque j'essaye d'ouvrir le fichier .xls avec la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & FichBase & ";Extended Properties=Excel 8.0;"
        .Open
    End With
Je reçois le message d'erreur suivant : "La table externe n'est pas dans le format attendu"

Et lorsque j'utilise la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
Function RequeteCSVFerme(FichBase As String, FeuilDest As String, CellDest As String, Entete As String, Chemin As String)
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
If Range(CellDest) Is Nothing Then Exit Function
Set Cn = New ADODB.Connection
On Error Resume Next
ThisWorkbook.Worksheets(FeuilDest).Select
'Définit la requête.
Cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "Dbq=" & FichBase & ";" & "Extensions=asc,csv,tab,txt;"
On Error GoTo 0
If Cn.State <> adStateOpen Then Exit Function
Set Rs = New ADODB.Recordset
'On Error Resume Next
'Définit la requête
Rs.Open "SELECT * FROM " & FichBase & ".xls", Cn, adOpenForwardOnly, adLockReadOnly, adCmdText
    On Error GoTo 0
    If Rs.State <> adStateOpen Then
        Cn.Close
        Set Cn = Nothing
        Exit Function
    End If
    ThisWorkbook.Worksheets(FeuilDest).Range(CellDest).Offset(0, 0).CopyFromRecordset Rs ' Works in Excel 2000 or later
    Rs.Close
    Set Rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Function
Ne marche pas non plus car je pense qu'il faut que l'extention du fichier corresponde à et lorsque je remplace .csv par .xls, j'ai également une erreur.

La solution que j'ai trouvé est de copier le fichier pour le renommer en .csv
Puis l'ouvrir avec la seconde méthode et ensuite supprimer le fichier préalablement créé. Mais c'est relativement lourd...