[Excel] Réference externe classeurs fermés
Résolu
Sylvain
-
schoret Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
schoret Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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