Accéder à une cellule Excel sans ouvrir le fichier

Signaler
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015
-
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015
-
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

Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
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.
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

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