Bonjour,

J'ai une question certainement facile pour des experts comme ceux présents sur ce site.

Je veux depuis un fichier Excel 2010 ".xlsb" récupérer les données d'un autre Fichier Excel 2010 ".xlsb" qui se trouvent dans une feuille nommée.
Pour cela, j'utilise 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
36
37
38
39
40
41
42
43
 
Sub Test()
	'déclarations
	Dim Cn As ADODB.Connection
	Dim Rst As ADODB.Recordset
	Dim ADOCommand As ADODB.Command
	Dim NomFeuille, Cellule, texte_SQL As String
 
	'Nom de la feuille dans le classeur fermé
	NomFeuille = "La feuille"
 
	'Adresse de la cellule contenant la donnée à récupérer
	Cellule = "A:D"
 
	'Création de la connexion sur le fichier source
	Set Cn = New ADODB.Connection
 
	'Connection aux données source
	With Cn
		.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
			& "C:\Le_Fichier.xlsb" _
			& ";Extended Properties=""Excel 12.0;HDR=YES;"""
		.Open
	End With
 
	'Définit la requête.
	Set ADOCommand = New ADODB.Command
	With ADOCommand
		.ActiveConnection = Cn
		.CommandText = "SELECT * FROM [" & NomFeuille & "$" & Cellule & "]"
	End With
 
	'récupération des données de la source
	Set Rst = New ADODB.Recordset
	Debug.Print "avant .Execute " & Now()
	Set Rst = ADOCommand.Execute
	Debug.Print "après .Execute " & Now()
 
	'libération de la mémoire
	Set Cn = Nothing
	Set Rst = Nothing
	Set ADOCommand = Nothing
End Sub
Mon problème est que mon code VBA est très lent au moment où il effectue le ".Execute".
A titre de comparaison, la mise à jour des données :
- avec VBA ADO (code fourni) => 1minute30secondes
- sans VBA mais avec une feuille connectée à la source Excel => 32secondes

Non seulement c'est lent, mais en plus j'ai plus de 300M de mémoire occupée car il semble que mon code lance l'ouverture en mémoire du fichier Excel source fermé certainement pour effectuer la requête demandée.

Question : existe-t-il un moyen d'optimiser ce code pour au moins atteindre celui sans VBA qui n'est pas pratique à maintenir dans le temps.
Merci.