Accéder à une cellule Excel sans ouvrir le fichier

cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015 - 23 nov. 2009 à 17:38
cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015 - 25 nov. 2009 à 09:57
Bonjour à tous, je cherche à avoir accès à des valeurs de cellules dans un fichier Excel sans l'ouvrir. Voici le code que j'utilise.

-----------------------------------------
'lire la valeur d'une cellule dans un classeur fermé

Sub test()
Dim fich$, feuil$, Cell As Excel.Range
fich = "D:\TestADO.xls"
feuil = "feuil1"
Set Cell = Excel.Range("A1")

MsgBox GetValueWithADO(fich, feuil, Cell)

End Sub

'Note : cette fonction est utilisable dans une feuille de calcul
'Ex :
' =GetValueWithADO("D:\TestADO.xls";"feuil1";A1)

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 'fs
----------------------------------------

Une erreur survient au niveau de la ligne Jaune et l'erreur "Type défini par l'utilisateur non défini" survient.
J'ai pourtant activé la bibliothèque Microsoft Office 11 Object Library. S'il y a un moyen de ne pas utiliser cette bibliothèque, c'est encore mieux.
Merci d'avance, je compte sur vous

nitho l'amateur

2 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
24 nov. 2009 à 21:10
Bonsoir,

Function GetValueWithADO(Classeur As String, Feuille As String, Cell As Range)


Depuis quand "Range" existe sous VB6 ?...

Ensuite, je pense que tu auras encore qlq erreurs...

Dim fich$, feuil$, Cell As Excel.Range
fich = "D:\TestADO.xls"
feuil = "feuil1"
Set Cell = Excel.Range("A1")


Amicalement,
Us.
0
cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015
25 nov. 2009 à 09:57
Merci pour ta réaction, je suis vraiment bloqué.

Ce code est à l'origine fait pour marcher sur vba Excel. Je suis en train de vouloir l'adapter. Pour Range j'ai essayé Excel.Range que vb6 devrais normalement reconnaitre. Mais même quand j'active la bibliothèque Microsoft Office 11.0 Object Library, ça ne marche pas pourtant il doit bien avoir un moyen de le faire.

Il y a aussi la méthode CreateObject Mais quand tu écris CreateObject(Excel.application") après pour spécifier le fichier excel on utilise la méthode open.
MonExcel.Workbooks.open("c:\...")

Or je ne veux pas que le fichier soit ouvert. Je ne sais donc pas comment faire

nitho l'amateur
0
Rejoignez-nous