Problème de référence à des classeurs fermés

Sylvain7

XLDnaute Nouveau
Bonjour,

J'essaye de lire des données depuis des classeurs fermés afin de les regrouper dans un seul classeur. J'ai dans un premeir temps essayer les fonctions INDIRECT et CONCATENER afin d'avoir une référence variable mais INDIRECT ne marche que si les classeurs sont ouverts.
Je me suis donc tourné vers une fonction personnelle LireCellule_ClesseurFerme() trouvée sur le net :

Code:
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")
    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

J'ai bien coché la référence Microsoft ActiveX Data Objetcs Library et vérifié mes arguments mais la fonction me renvoi l'erreur #VALEUR. Encore mieux, la fonction marche lorsque le classeur source est ouvert!
Pour info, je suis sur le réseau de la société, donc mon chemin est du type \\serveur\MonService\MonDossierPerso et j'utilise Excel 2007.
Quelqu'un aurait-il une explication pour m'aider à avancer?
Merci d'avance!
 
G

Guest

Guest
Re : Problème de référence à des classeurs fermés

Re,

Une correction à la macro qui rajouter le "\" QUE s'il n'est pas déjà dans le paramètre:

Code:
Public Function LireCellule_ClasseurFerme( _
         Chemin As String, _
         Fichier As String, _
         Feuille As String, _
         Cellule As String) As Variant
    
    Const adStateOpen = 1
    Const adUseClient = 3
    Const adOpenStatic = 3
    Const adLockBatchOptimistic = 4
     
     Application.Volatile
  
  
     Dim Cible As String, c As Range
     Feuille = Feuille & "$"
  
     Cible = Cellule & ":" & Cellule
  
     'tester si Cible est bien une référence à cellule la testant dans la feuille active
    ' On Error Resume Next
     Set c = Range(Cible)
     'Si la cilbe n'est pas une addresse de cellule alors renvoyer l'erreur #Ref
     If c Is Nothing Then
         LireCellule_ClasseurFerme = CVErr(xlErrRef)
         Exit Function
     End If
    
     If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
  
     Dim Source As Object: Set Source = CreateObject("adodb.connection")
     Source.CursorLocation = adUseClient
     Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
         "Data Source=" & Chemin & Fichier & _
         ";Extended Properties=""Excel 12.0;HDR=No"";"
  
     If Source.State <> adStateOpen Then
         LireCellule_ClasseurFerme = CVErr(xlErrNull)
         Set Source = Nothing
         Exit Function
     End If
  
     Dim Rst As Object: Set Rst = CreateObject("ADODB.Recordset")
     Rst.Open "SELECT * FROM [" & Feuille & Cible & "]", Source, adOpenStatic, adLockBatchOptimistic
  
     If Rst.State = adStateOpen Then
       LireCellule_ClasseurFerme = Rst(0).Value
       Rst.Close
     Else
       LireCellule_ClasseurFerme = CVErr(xlErrNA)
     End If
  
     Source.Close
     Set Source = Nothing
     Set Rst = Nothing
 End Function

A+
 

Vincent63

XLDnaute Nouveau
Re : Problème de référence à des classeurs fermés

Bonjour,

[Edit] La réponse ci-dessous ne changera rien voir réponse dans post#9 plus bas:

Essaie de remplacer l'espace par un underscore dans le paramètre Feuile:

=LireCellule_ClasseurFerme("J:\DIF\LMI_EMBALLAGE\2 015\"; "2014 Saisie journaliere.xlsm"; "BILAN_ANNUEL"; "$B$1")


A+

C'est bon j'ai trouvé ! Il suffisait de supprimer les '$'.
 

Discussions similaires

Réponses
2
Affichages
275

Membres actuellement en ligne

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 611
dernier inscrit
sebboes