Pages

[XL-2010] La connexion ADO excel s'ouvre dans le mauvais processus sujet

jeudi 30 janvier 2014




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 :

Code:


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


Ce code est lancé par une macro autoexec workbook.open via une tâche planifiée.
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




Aucun commentaire:

Enregistrer un commentaire