[Excel] Réference externe classeurs fermés

Résolu/Fermé
Sylvain - Modifié par Sylvain le 26/10/2011 à 11:37
schoret Messages postés 5 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 27 octobre 2014 - 28 juil. 2013 à 03:59
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 :

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:

5 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 26/10/2011 à 18:03
On peut lire dans un classeur fermé avec une simple formule :

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
1
schoret Messages postés 5 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 27 octobre 2014
28 juil. 2013 à 03:59
hey super gros merci pour se petit bout de code

cela fait exactements le travail que je voulais

ça fais 2 jours que je cherchais une solution pour lire les fichier fermé.

merci
0