Lire dans les classeurs Excel fermés (ADODB)
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:
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:
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...