[Excel] Réference externe classeurs fermés

Résolu
Sylvain -  
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 :

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!

5 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
    1. schoret Messages postés 6 Statut Membre
       
      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