Bonjour
J'ai un problème très technique sur les connexions ADO. J'ai un classeur .xlsm qui fait des requêtes SQL sur lui-même pour comparer des données entre plusieurs onglets. Pour cela, j'utilise le code suivant :
Ce code est lancé par une macro autoexec workbook.open via une tâche planifiée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Dim strcon As String Dim cn As Object Dim rcset As Object Dim strSQL As String strSQL = "ma requete de comparaison" strcon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & ActiveWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;""" Set cn = CreateObject("ADODB.Connection") Set rcset = CreateObject("ADODB.Recordset") cn.Open strcon rcset.Open strSQL, cn, 3, 1
Je rappelle que les tâches planifiées ouvrent à chaque fois une nouvelle instance d'excel (nouveau processus).
1 - si je lance la tâche sans qu'aucun autre excel soit présent, le classeur s'ouvre, lance la macro qui "s'ouvre lui-même" pour faire sa requête. La connexion ADO utilise alors le même processus, et la tâche est très rapide.
2 - si je lance la tâche alors qu'un autre excel est déjà ouvert, le classeur s'ouvre dans un nouveau processus, lance la macro, et la connexion ADO se fait dans le processus du premier excel (en lançant l'autoexec du premier excel au passage). La tâche est alors soit très lente, soit plante directement (l'excel qui contient la requête reste ouvert dans le premier processus), selon l'excel déjà ouvert.
Question : comment faire pour que la connexion ADO se fasse dans le même processus que l'instance d'excel qui la créé, même si d'autres processus Excel sont ouverts ?
Autrement, comment contourner ce problème, sachant que j'ai absolument besoin d'utiliser des requêtes SQL ?
Merci d'avance pour votre aide
Partager