Bonjour,

J'ai repris en l'adaptant un peu l'exemple de SilkyRoad

J'ai contrôlé mes valeurs passées en paramètre et elles sont correctes.

Le MsgBox avec Dir sur mon fichier m'affiche le nom du fichier recherché
Le MsgBox (QueryStr) m'affiche la requête
Le MsgBox (2) n'est pas atteint

Je ne vois pas mon erreur de syntaxe sachant que mon objectif est de lire une cellule déterminée d'un fichier xlsm fermé et de retourner sa valeur.

Merci pour votre regard extérieur.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Function LireCellule_ClasseurFerme( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As Variant) As Variant
    'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
    'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
    'Menu Outils/Références
 
    Application.Volatile
 
    Dim Connexion As New ADODB.Connection 'Définir une variable ADODB Connection et Créer une nouvelle instance
    Dim Rst As New ADODB.Recordset 'Pour accueillir un RecordSet et Créer une nouvelle instance
 
    Dim CheminFichier As String
    Dim QueryStr As String
 
    '/!\ Attention à ne pas oublier le symbole \ entre le chemin et la feuille.
    CheminFichier = Chemin & "\" & Fichier
    '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
    Feuille = Feuille & "$"
    '/!\ Attention lire une cellule il faut rechercher sous la forme A1:A1
    Cellule = Cellule & ":" & Cellule
 
    MsgBox Dir(CheminFichier) 'test l'existence du fichier
 
    '--- Connexion ---
    With Connexion
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & CheminFichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
    End With
    '-----------------
 
    '---- Lecture Fichier ---
    QueryStr = "SELECT * FROM [" & Feuille & Cellule & "]"
    MsgBox (QueryStr)
 
    '---- Lecture Fichier ---
    Set Rst = Connexion.Execute(QueryStr)
    MsgBox (2)
    '---- Lecture Cellule ---
    'Ecrit le résultat de la requête dans la cellule
    'Range("AM2").CopyFromRecordset Rst
 
    '--- Fermeture connexion ---
    Rst.Close
    Connexion.Close
    Set Connexion = Nothing
    Set Rst = Nothing
End Function