Récupération de la valeur d'une cellule dans un classeur fermé
ClementECO
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
ClementECO Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
ClementECO Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
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 :
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
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:
- Récupérer données classeur fermé vba
- Recuperer message whatsapp supprimé - Guide
- Rouvrir onglet fermé chrome - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Comment recuperer une video sur youtube - Guide
2 réponses
Bonjour,
pour avoir le contenu de la cellule:
pour #VALEUR je ne vois pas. Mais ce n'est pas secondaire
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
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 :
J'ai laissé
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
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