Bonjour,
Je recherche une solution pour éviter que l'instance EXCEL ouverte par ACCESS ne soit utilisée par l'ouverture d'un classeur quelconque lorsque l'on clique sur le fichier dans l'explorateur Windows :question:
Version imprimable
Bonjour,
Je recherche une solution pour éviter que l'instance EXCEL ouverte par ACCESS ne soit utilisée par l'ouverture d'un classeur quelconque lorsque l'on clique sur le fichier dans l'explorateur Windows :question:
salut,
peut-être en fermant l'application excel créée en fin de procédure... :oops:
Tout à fait d'accord 8-)
Le problème est que le traitement est assez long et que l'utilisateur désire travailler en parallèle sur d'autre tâche...
Donc ma demande concerne le moment où l'instance Excel est en plein traitement à partir d'Access.
Une solution de secours, assez contraignante, est que l'utilisateur ouvre lui-même Excel et son fichier par le menu ouvrir... Peu souple pour l'utilisateur :?
ou alors, tu lances ton application excel en visible = false...
Je travaille essentiellement en arrière plan... ;)
Mais lorsque l'on ouvre un fichier Excel en cliquant sur le fichier dans l'explorateur, Windows controle si une instance Excel est en cours...
Comme c'est le cas, il ouvre le fichier dans cette instance :(
Je voudrais donc qu'il ne concidère pas cette intance ouverte pas Access comme utilisable
dans mes applis, l'ordi est dédié aux batch, donc de toute facon personne n'ouvre de fichiers dessus.
Le traitement est long ?
Si oui, pense à voir la possibilité d'avoir une machine dédiée
Sinon, ton utilisateur peut-il se passer d'excel durant le traitement ?
Euh... ca va pas être possible... :aie:
J'vais donner plus de détail sur l'environnement:
L'application Access sert pour des extractions sur Excel en fonction de critères que l'utilisateur sélectionnent
Une fois la demande d'extraction réalisée, l'application créer une instance Excel où les données de la base y sont placés et la mise en page réalisée.
Le traitement peut durée une dizaine de minutes...
Donc pendant ce temps l'utilisateur peut aller boire un café... Le problème c'est qu'il peut avoir à réaliser une dizaine d'extraction dans la journée...
A la fin de la journée, on ne tiendra plus l'utilisateur qui sera en overdose de caféïne... :mouarf:
Pour illustrer le problème, voici un petit bout de code qui permet de vous mettre en situation
Une fois ce code copié dans un module d'une nouvelle base (dont la référence Excel y sera activé)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub Test() Dim xlApp As Excel.Application Dim xlWb As Excel.Workbook Dim xlSh As Excel.Worksheet Dim I As Long Set xlApp = CreateObject("Excel.Application") Set xlWb = xlApp.Workbooks.Add Set xlSh = xlWb.Worksheets(1) For I = 1 To 15000 xlSh.Cells(1, 1) = I Next xlWb.Close Savechanges:=False xlApp.Quit Set xlSh = Nothing Set xlWb = Nothing Set xlApp = Nothing End Sub
Ouvrir l'explorateur Windows pour trouver un fichier Excel à ouvrir pendant le test.
Lancer le bout de code dans la base (temps d'éxécution 10s environ), ouvrir le fichier Excel dans l'explorateur, puis le fermer aussitôt...
Et vous voilà avec une belle erreur dans Access car vous venez de fermer l'instance qu'il avait ouvert pour son traitement... :cry:
Après plusieurs recherches infructueuses, la persévérance a apporté ces fruits :yaisse2:
La réponse à ma question est la commande IgnoreRemoteRequests
Ainsi les requêtes DDE hors programme sont ignorées.
Voici comment je l'ai utilisée
Voila pour info, si cela peut servir à d'autres :king:Code:
1
2
3
4
5
6
7
8 Dim xlApp As Excel.Application Dim xlWb As Excel.Workbook Dim xlSh As Excel.Worksheet Dim I As Long Set xlApp = CreateObject("Excel.Application") xlApp.IgnoreRemoteRequests = True Set xlWb = xlApp.Workbooks.Add ...