Bonjour,

J'essaie de lire certains d'un classeur fermé avec le code suivant.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, Feuille As String
 
    'Adresse de la cellule contenant la donnée à récupérer
    'Cellule = "B4:B4"
      'Pour une plage de cellules, utilisez:
    Cellule = "G10:G15"
 
    Feuille = "Données$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = "C:\Documents and Settings\moi\Bureau\dossier\fichier.xls"
 
    Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set ADOCommand = New ADODB.Command
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
 
    Set Rst = New ADODB.Recordset
    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
 
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
    Range("AO10").CopyFromRecordset Rst
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
Sa fonctionne très bien dans VBA, sa prend tout le contenu et la copie dans ma cellule AO10.

Je veux pouvoir l'appeler via ma feuille excel, j'ai donc crée une fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
Private Function LireCellules()
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, Feuille As String
 
    'Adresse de la cellule contenant la donnée à récupérer
    'Cellule = "B4:B4"
      'Pour une plage de cellules, utilisez:
    Cellule = "G10:G15"
 
    Feuille = "Données$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = "C:\Documents and Settings\u3346\Bureau\Horaire Variable\Hor_Variable_JH_2010-05.xls"
 
    Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set ADOCommand = New ADODB.Command
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
 
    Set Rst = New ADODB.Recordset
    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
 
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
    Range("AO10").CopyFromRecordset Rst
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
 
End Function
Le code est identique mais quand j'essaie de l'appeler en écrivant =LireCellule()

Dans une cellule quelconque, sa me ressort l'erreur ::

La méthode CopyFromRecordset de l'objet Range a échoué


Quelqu'un aurait une idée du "pourquoi" ?

Je vous remercit !