Bonjour,

Je viens d'utiliser un code que j'ai trouvé pour extraire des valeurs d'un autre fichier excel fermé. et qui fonctionne très bien

https://silkyroad.developpez.com/VBA/ClasseursFermes/

Voici le code que j'ai trouvé sur le site

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
Sub TestConnection_V1()
    Dim Cn As ADODB.Connection
    Dim Fichier As String
 
    'Définit le classeur fermé servant de base de données
    Fichier = "C:\monClasseurBase_V01.xls"
 
    Set Cn = New ADODB.Connection
 
    '--- Connexion ---
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
        .Open
    End With
 
    'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002.
 
    '
    '... la requête ...
    '
 
    '--- Fermeture connexion ---
    Cn.Close
    Set Cn = Nothing
End Sub
J'ai essayé de l'adapter au niveau du chemin complet du classeur fermé en lui indiquant d'aller récupérer ce chemin dans une cellule que j'ai nomme "chemin_balancen".
Et la le code ne fonctionne plus il me r'envoi une erreur.

voici le code adapté à ma sauce. Pouvez vous me dire ce qui ne fonctionne pas.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
Sub extractionValeurCelluleClasseurFerme()
    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
    Dim DL As Integer 'déclare al variable DL (Dernière Ligne)
    
    'ENTITE -------------------------------------------------------------------------
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "C2:C1000"
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
      
    Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = Range("chemin_balancen").Value
                
    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("A4").CopyFromRecordset Rst
    
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "A2:B1000"
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
      
    Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = Range("chemin_balancen").Value
                
    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("C4").CopyFromRecordset Rst
    
    'A Nouveau ------------------------------------------------------------------------------
    
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "G2:G1000"
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
      
    Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = Range("chemin_balancen").Value
                
    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("E4").CopyFromRecordset Rst
            
    'Mouvements ------------------------------------------------------------------------------
    
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "H2:I1000"
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
      
    Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = Range("chemin_balancen").Value
                
    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("F4").CopyFromRecordset Rst
    
    'Débits / Crédits / SOLDEN------------------------------------------------------------------------------
    
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "K2:M1000"
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
      
    Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = Range("chemin_balancen").Value
                
    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("H4").CopyFromRecordset Rst
            
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
    
    DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
Range("K4").FormulaR1C1 = "=IF(RC[-1]<0,0,RC[-1])"
Range("K4").AutoFill Destination:=Range("K4:K" & DL), Type:=xlFillDefault
With Range("K4:K" & DL)
ActiveSheet.Calculate
.Value = .Value
    
   
   End With
    
    DoEvents
    DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
Range("L4").FormulaR1C1 = "=IF(RC[-2]>0,0,RC[-2]*-1)"
Range("L4").AutoFill Destination:=Range("L4:L" & DL), Type:=xlFillDefault
With Range("L4:L" & DL)
ActiveSheet.Calculate
.Value = .Value

End With
    
    DoEvents
   DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
Range("b4").FormulaR1C1 = "=LEFT(RC[1],4)"
Range("b4").AutoFill Destination:=Range("b4:b" & DL), Type:=xlFillDefault
With Range("b4:b" & DL)
ActiveSheet.Calculate
.Value = .Value

End With
    
End Sub
Merci pour l'aide que vous pouvez m'apporter