Bonjour à tous!
Besoin d'aide svp !!!!!
Je dois faire une maintenance d'un fichier excel qui utilise cette fameuse fonction GetValueWithADO pour récupérer des données dans des fichiers excels fermés
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 29 30 31 32 33 34
|
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 |
Après avoir étudié le code, la chaine de requête SELECT
strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
prend l'addresse d'une plage de 2 cellules parce qu'on a affecté
Set dummyBase = Cell.Resize(2)
Or moi, je dois récupérer juste une cellule bien défini pour chaque fichier et non une plage parce que j'ai analysé que parfois une cellule non renseigné dans une plage entraîne des falsifications des données.
J'ai déjà essayé
strCmd = "SELECT * FROM [" & Feuille & "$" & Cell.Address(0, 0) & "]"
mais me renvoie une erreur
Je croyais que c'était une erreur de syntaxe, alors j'ai modifié en
strCmd = "SELECT * FROM [" & Feuille & "!" & Cell.Address(0, 0) & "]"
mais me renvoie encore une erreur du genre "le moteur de la base de données ne peut pas trouver 'Formulaire!Q12' (feuille nommée Formulaire et Cellule à récupérer = Q12)
Je vous demande alors si c'est possible de récupérer une seule cellule en donnant son addresse via la chaine strCmd si oui, pourriez-vous svp m'aider à trouver le bon syntaxe ou existe-t-il d'autres façons pour récupérer via ADO la valeur d'une cellule d'un fichier fermé!!
Merci dejà pour vos réponses
Partager