' Lire la valeur d'une cellule dans un classeur fermé
Sub test()
Dim fich$, feuil$, Cell As Range
fich = "D:\TestADO.xls"
feuil = "feuil1"
Set Cell = Range("A1")
MsgBox GetValueWithADO(fich, feuil, Cell)
End Sub
Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
Dim RcdSet As Object
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range
'prépare une "base de données" bidon pour la clause SELECT
'(une entête fictive et une ligne de données)
Set dummyBase = Cell.Resize(2)
'prépare les commandes ADO et SQL
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
' crée l'objet Recordset
Set RcdSet = CreateObject("ADODB.Recordset")
' va chercher l'info
RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
' et la renvoie
GetValueWithADO = Application.Clean(RcdSet(0))
' autre syntaxe possible
'GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))
'nettoyage
Set RcdSet = Nothing
End Function