[Excel] Réference externe classeurs fermés
Résolu
Sylvain
-
schoret Messages postés 6 Statut Membre -
schoret Messages postés 6 Statut Membre -
Bonjour,
J'essaye de lire des données sur des classeurs fermés afin de regrouper les infos sur un seul classeur.
Mon but est d'avoir une référence variable, j'ai donc d'abord essayé avec les fonction INDIRECT et CONCATENER avant de découvrir que INDIRECT est limité aux classeurs ouverts.
J'ai donc trouvé une fonction VBA LireCellule_ClasseurFerme() sur le net pour pallier à ce problème, mais elle me renvoi l'erreur #VALEUR, et je me suis même aperçu que la fonction marchait si le classeur était ouvert (ce qui m'a doucement fait rire!), quelqu'un aurait-il une explication qui pourrait m'aider à avancer?
Voilà le code de la fonction :
Je précise que j'ai bien pris soin de cocher la référence Microsoft ActiveX Data objects Library dans les outils Visual Basic.
Merci pour votre aide!
J'essaye de lire des données sur des classeurs fermés afin de regrouper les infos sur un seul classeur.
Mon but est d'avoir une référence variable, j'ai donc d'abord essayé avec les fonction INDIRECT et CONCATENER avant de découvrir que INDIRECT est limité aux classeurs ouverts.
J'ai donc trouvé une fonction VBA LireCellule_ClasseurFerme() sur le net pour pallier à ce problème, mais elle me renvoi l'erreur #VALEUR, et je me suis même aperçu que la fonction marchait si le classeur était ouvert (ce qui m'a doucement fait rire!), quelqu'un aurait-il une explication qui pourrait m'aider à avancer?
Voilà le code de la fonction :
Function LireCellule_ClasseurFerme( _
Chemin As String, _
Fichier As String, _
Feuille As String, _
Cellule As Variant) As Variant
Application.Volatile
Dim Source As Object, Rst As Object, ADOCommand As Object
Dim Cible As String
Feuille = Feuille & "$"
Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
Cellule.Address(0, 0, xlA1, 0)
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & "\" & Fichier & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
Set ADOCommand = CreateObject("ADODB.Command")
With ADOCommand
.ActiveConnection = Source
.CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
End With
Set Rst = CreateObject("ADODB.Recordset")
'1 = , 3 =
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
Set Rst = Source.Execute("[" & Feuille & Cible & "]")
LireCellule_ClasseurFerme = Rst(0).Value
Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing
End Function
Je précise que j'ai bien pris soin de cocher la référence Microsoft ActiveX Data objects Library dans les outils Visual Basic.
Merci pour votre aide!
A voir également:
- Fonction indirect excel autre classeur
- Fonction si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Fonction moyenne excel - Guide
5 réponses
On peut lire dans un classeur fermé avec une simple formule :
Cordialement
Patrice
Sub LireFichierFermé()
Dim NomFichier As String
Dim Chemin As String
Dim Formule As String
ActiveSheet.Range("A1").ClearContents
Chemin = "D:\Temp\"
NomFichier = "Classeur_à_lire.xls"
Formule = "='" & Chemin & "[" & NomFichier & "]Feuil1" & "'!" & "A1"
ActiveSheet.Range("A1").Formula = Formule
ActiveSheet.Range("A1").Value = ActiveSheet.Range("A1").Value
End Sub
Cordialement
Patrice
cela fait exactements le travail que je voulais
ça fais 2 jours que je cherchais une solution pour lire les fichier fermé.
merci