Récupération de la valeur d'une cellule dans un classeur fermé

Fermé
ClementECO Messages postés 2 Date d'inscription mardi 31 mars 2015 Statut Membre Dernière intervention 1 avril 2015 - Modifié par ClementECO le 31/03/2015 à 15:38
ClementECO Messages postés 2 Date d'inscription mardi 31 mars 2015 Statut Membre Dernière intervention 1 avril 2015 - 1 avril 2015 à 11:42
Bonjour,

Ma première expérience VBA remonte à la semaine dernière et je suis très loin d'être un programmeur. J'ai besoin de récupérer des données d'un fichier .xls fermé (et protégé contre les modifications) pour en renseigner un autre (actif celui-ci) et j'ai voulu créer une fonction pour avoir un outil pratique. Je me suis très très largement inspiré du tutoriel de SilkyRoad pour ce faire.

Voilà donc le chef-d'oeuvre :

Function ConnectToClosedWB(file As String, sheet As String, cell As String) As String

Dim Cn As ADODB.Connection
Dim text_SQL As String
Dim Rst As ADODB.Recordset
Dim cell_arg As String


cell_arg = cell & ":" & cell

Set Cn = New ADODB.Connection

With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & file & _
";Extended Properties=""Excel 8.0;HDR=NO"""
.Open
End With

text_SQL = "SELECT * FROM [" & sheet & "$" & cell_arg & "]"

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(text_SQL)

ConnectToClosedWB = Rst(0).Name

Cn.Close
Set Cn = Nothing
Set Rst = Nothing

End Function


A partir de ça j'avais un problème (maintenant deux) :
- Le premier était que je n'arrivais pas à récupérer la valeur du recordset (ici une cellule, si je ne me trompe pas), seulement son nom. Quand la cellule cible contenait du texte, ça marchait, quand elle contenait un nombre, cela me renvoyait "F1".
- Le 2ème est que, ce même code fonctionnant ce matin (hormis le 1er problème) ne me renvoie plus que #VALEUR maintenant que j'ai changé de machine. Ce n'est peut-être que secondaire ça...

Je vous remercie par avance de votre aide !

Cordialement

A voir également:

2 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
31 mars 2015 à 17:11
Bonjour,

pour avoir le contenu de la cellule:

ConnectToClosedWB = Rst(0)
'ou
ConnectToClosedWB = Rst(0).Value


pour #VALEUR je ne vois pas. Mais ce n'est pas secondaire
0
ClementECO Messages postés 2 Date d'inscription mardi 31 mars 2015 Statut Membre Dernière intervention 1 avril 2015
1 avril 2015 à 11:42
Bonjour,

Merci pour ta réponse.

J'ai testé avec tes 2 propositions mais ça ne marchait toujours pas. J'ai modifié mon code et en particulier ConnectionString :


With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& file & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With


J'ai laissé

ConnectToClosedWB = Rst(0).Name


Et... Ca marche ! Je ne pensais pas avoir besoin de mettre ce Provider avec Excel 12.0 en Extended Properties car je ne lisais que des fichers au format .xls, mais apparemment c'est ça qui n'était pas accepté. Voilà !

En tout cas merci.

Bonne journée
0