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 :
Je reçois le message d'erreur suivant : "La table externe n'est pas dans le format attendu"
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
Et lorsque j'utilise la méthode :
Ne marche pas non plus car je pense qu'il faut que l'extention du fichier corresponde à
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 Functionet lorsque je remplace .csv par .xls, j'ai également une erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (*.txt; *.csv)};
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...
Partager