Problème avec 2 instances Excel
Salut,
Mon projet est construit autour d'un classeur Excel de trame. A partir de cette trame, je crée un fichier de travail, avec une référence unique, que j'enregistre sous un nom différent. La suite de la procédure est le remplissage de ce fichier. Au cours de la procédure, la trame devient donc le fichier de travail
Je ré-ouvre cette trame pour enregistrer la référence du fichier de travail et je voudrais ensuite réafficher le menu principal (un UserForm de la trame) et fermer le fichier de travail.
A la fin de la procédure de création du fichier de travail, j'ai mis un Workbooks(Fichier_trame).UserForm01.Show . Dans mon idée, le Fichier_trame étant ouvert, il suffisait d'afficher le UserForm01 et de prévoir dans l'Initialize de cet UserForm la fermeture du fichier de travail s'il est trouvé ouvert.
Mon problème est que la UserForm ne s'affiche pas. Donc le fichier de travail reste ouvert et je ne peux pas poursuivre si j'ai besoin de créer un autre fichier de travail.
Est ce que vous avez une explication, sachant que :
- " Fichier_Trame " est une variable correctement définie (elle me sert à gérer l'ouverture de la trame, sa modification et sa sauvegarde) ,
- L'enregistrement de la référence dans le fichier trame et la sauvegarde du fichier fonctionnent sans problème
- J'ai essayé avec Workbooks(Fichier_trame).UserForm01.Load sans plus de succès.
- J'ai aussi essayé de fermer Fichier_trame et de le relancer en faisant appel directement au script vbs existant, mais dans ce cas la trame est ouverte dans une deuxième instance Excel, et donc la recherche du fichier de travail pour sa fermeture ne fonctionne pas étant donné qu'elle ne se fait que dans l'instance de Fichier_trame (ma routine de recherche de fichier ouvert est correcte, je l'utilise sans problème à deux reprises dans l'ensemble des macros).
Merci d'avance à ceux qui pourront me répondre.
Manu
Bonjour,
pas tout compris...
Ton fichier trame, tu ne peux pas l'enregistrer en tant que modèle *.xltm ?
A l'ouverture tu seras obligé de l'enregistrer sous un nouveau nom et l'original reste préservé, et toujours disponible.
Sinon : 2 instances... Je pose la question. Pourquoi le créer dans une autre instance si c'est bloquant pour toi ???
eric
Ton fichier trame, tu ne peux pas l'enregistrer en tant que modèle *.xltm ?
A l'ouverture tu seras obligé de l'enregistrer sous un nouveau nom et l'original reste préservé, et toujours disponible.
Mon fichier trame est un classeur Excel classique, mais dès son ouverture l'UserForm01 qui s'affiche m'impose de créer un fichier dossier de visite immédiatement enregistré sous un nouveau nom. Il n'est donc jamais modifié.
Ce fichier trame est la porte d'entrée du " logiciel ". Il me permet à la fois de créer un dossier de visite et aussi d'en sélectionner un parmi ceux qui sont ouverts pour le clôturer. Les deux seules modif que je fais de cette trame (et qui fonctionnent) sont :
- l'ajout de la référence du dossier de visite à la liste des dossiers de visite ouverts lors de sa création,
- la suppression de la référence du dossier de visite de la liste des dossiers de visites ouverts lors de sa clôture.
Sinon : 2 instances... Je pose la question. Pourquoi le créer dans une autre instance si c'est bloquant pour toi ???
Ben parce que j'ai pas le choix. Mon fichier trame est lancé par un script vbs qui crée automatiquement une nouvelle instance Excel. Si tu as une solution pour qu'il réutilise l'instance déjà ouverte, je suis preneur de la solution, ça résoudra mon problème.
Je prévois déjà la fermeture de tous les fichiers Excel à l'affichage du UserForm1 de la trame, à la première ouverture, il ne restera qu'elle, et à sa réouverture à la fin de la création du dossier de visite, il n'y aura forcément qu'une seule instance Excel ouverte donc elle fermera le dossier de visite.
Quoique, encore mieux : si tu sais comment lancer Excel par le script dans une instance spécifique, ça permettrait à mon logiciel de tourner sans impacter les autres fichiers Excel ouverts sur le PC.
Je ne peux pas forcément te mettre les classeurs pour faire un test parce qu'il y a une arborescence à respecter (elle est écrite en dur dans les macros), mais je te mets du mode d'emploi (qui couvre au moins la partie création du dossier de visite).
C'est celui de la version actuelle qui ferme Excel à la fin la création d'un dossier de visite, et de manière pas très propre d'ailleurs (Application.Quit en masquant les messages d'erreur du script vbs qui sont générées). La modification que je suis en train de faire est justement de ne plus fermer Excel mais de revenir au menu principal de la trame (et pas du dossier de visite nouvellement créé) pour permettre d'enchainer sans avoir à ré-ouvrir le logiciel.
Merci d'avance.
A+
Manu
J'ai toujours autant de mal à appréhender ta mécanique...
Je ne connais pas vbs.
Tu devrais déposer la partie de code concernant la création du classeur. Ca inspirera peut-être d'autres s'y connaissant mieux.
Ici tu trouveras un code permettant de lister les classeurs de toutes les instances des fois que ça t'ouvre une piste :
eric
Peu importe en fait le mode de création du dossier de visite. Ca fonctionne donc il n'y a pas de problème.
Le problème est que à la fin de ma macro, aucune des commandes :
- Workbook(Fichier_trame).UserForm01.show , ou
- Call Workbook(Fichier_Trame).Ouverture, ou
- Application.Run Workbooks(Fichier_trame) & "!Module1.Ouverture"
ne fonctionnent alors que :
- le classeur correspondant à Fichier_trame est ouvert,
- la variable " Fichier_Trame " est correctement définie (Je l'utilise dans les lignes précédentes et tout fonctionne),
- que la macro Ouverture fonctionne sans problèmes (c'est celle qui est appelée à l'ouverture du fichier la trame, elle affiche la UserForm01),
- que la UserForm01 fonctionne elle aussi (c'est le point de départ de la macro).
J'ai mis un MsgBox avant et après cette ligne de commande, les 2 s'affichent. La ligne est donc bien lue, mais pas exécutée.
J'ai essayé de rajouter un .Name sur le Workbooks, ça ne fonctionne pas mieux.
Et je n'ai aucun message d'erreur.
Je clôture ce fil de discussion parce que le titre ne correspond pas au problème en fait, et j'en ouvre un autre.
Manu