Lu76Fer
XLDnaute Occasionnel
Bonjour,
Je partage ici un classeur type permettant d'ouvrir un autre classeur cible sur une nouvelle session (Application) Excel. A l'aide d'une procédure ajoutée au classeur cible et servant d'interface entre les 2 sessions, le classeur modèle transmet une variable session de type Application permettant ainsi de contrôler la session principale depuis le classeur cible.
Remarque : lors de l'ouverture du fichier cible à partir du modèle, une nouvelle session Excel est visible au niveau du gestionnaire des tâches car une nouvelle ligne EXCEL.EXE se rajoute
Le modèle proposé dans ce sujet, prend en charge l'erreur d'ouverture du fichier cible, l'erreur d'appel à la procédure servant d'interface et en l'abscence d'erreur se ferme.
Attention ! Il ne faut pas définir de procédure automatique comme Workbook_Open dans votre classeur cible car elle se lancerait plus vite que la procédure d'interface.
Ouvrez le classeur modèle et remplissez les 3 champs en jaune :
Limitation : le classeur cible une fois ouvert peut se retrouver en arrière plan ...
Voici le principe du code principal :
Il faut créer et afficher une nouvelle Session
Ensuite, il faut ouvrir le classeur cible; par exemple Target.xlsm
Ensuite il faut transmettre la référence à la session principale à l'aide de l'instruction Run qui exécute notre procédure d'interface avec comme paramètre l'objet Application :
Remarque : il n'est normalement pas possible de transmettre une référence à un objet à l'aide de l'instruction Run à l'exception de l'objet Application !!
L'avantage d'ouvrir une application depuis une autre session c'est de pouvoir contrôler un autre classeur ouvert sur la session principale (Evènements à l'aide d'un module de Classe) sans que son code ne soit visible dans le VBE de la session principale et sans qu'il ne soit Stoppé ! En effet, si on stop VBE sur une session cela réinitialise le code de tous les classeurs de la session.
P.J. : pour accéder au code du fichier OpenWkbInNewSession.xlsm, il faut renommer le fichier exemple Workbook.xlsm car sinon le fichier se ferme automatiquement !
Remarque : lors de l'ouverture du fichier cible à partir du modèle, une nouvelle session Excel est visible au niveau du gestionnaire des tâches car une nouvelle ligne EXCEL.EXE se rajoute
Le modèle proposé dans ce sujet, prend en charge l'erreur d'ouverture du fichier cible, l'erreur d'appel à la procédure servant d'interface et en l'abscence d'erreur se ferme.
Attention ! Il ne faut pas définir de procédure automatique comme Workbook_Open dans votre classeur cible car elle se lancerait plus vite que la procédure d'interface.
Ouvrez le classeur modèle et remplissez les 3 champs en jaune :
- Si votre classeur cible est installé dans un sous-répertoire par rapport à ce classeur indiqué le chemin relatif
- Entrez le nom avec l'extension de votre classeur cible
- Saisissez le nom de la procédure d'interface et vous aurez le modèle de code à copier dans votre classeur cible.
VB:
Public MainSession As Application 'Session principale
Public Sub SessionInterface(appSrc As Application)
Set MainSession = appSrc
'<CODE> ....
Application.OnTime Now, "Init" 'Lance par ex. la procédure Init dans un module sur le classeur cible
End Sub
Limitation : le classeur cible une fois ouvert peut se retrouver en arrière plan ...
Voici le principe du code principal :
Il faut créer et afficher une nouvelle Session
VB:
Set newXLInstance = New Application
newXLInstance.Visible = True
VB:
Set wbkTarget = newXLInst.Workbooks.Open("Target.xlsm")
VB:
newXLInstance.Run "'Target.xlsm'!SessionInterface", Application
L'avantage d'ouvrir une application depuis une autre session c'est de pouvoir contrôler un autre classeur ouvert sur la session principale (Evènements à l'aide d'un module de Classe) sans que son code ne soit visible dans le VBE de la session principale et sans qu'il ne soit Stoppé ! En effet, si on stop VBE sur une session cela réinitialise le code de tous les classeurs de la session.
P.J. : pour accéder au code du fichier OpenWkbInNewSession.xlsm, il faut renommer le fichier exemple Workbook.xlsm car sinon le fichier se ferme automatiquement !
Pièces jointes
Dernière édition: