Vba afficher un userform après enregistrement

Bonjour,

Je vous explique mon problème : je travaille avec une macro excel qui ouvre un fichier Visio. La macro ouvre la boite de dialogue “enregistrer sous” de visio (par des commandes SendKeys Alt & f & u). J’aimerais que mon UserForm s’affiche après que l’utilisateur ai fini d’enregistrer son document ou ai décider d’annuler pour lui proposer une impression. J’espère que je me suis bien exprimée, j’attends vos réponse :slight_smile:

Laura

Bonjour,

Je n’ai pas pour habitude d’interagir avec des applications tierces depuis Excel donc mes suggestions seront peut-être à coté de la plaque…

La 1ère chose qui me vient à l’esprit en parlant de UserForm, c’est UserForm.show. Je suppose que tu as déjà testé et que ça ne fonctionne pas, donc que le problème est d’une autre nature… mais il est utile de poser la question, juste au cas où.

Je suis surpris de l’utilisation de sendkeys. J’aurais imaginé qu’il est possible d’interagir par VBA avec les objets de Visio et de sauvegarder directement, comme l’exemple présent sur la page suivante

D’après ce que tu as écrit, je crois comprendre (mais ça n’est pas clair) que ton problème est que tu fais passer Visio au 1er plan en ouvrant un menu et que ta fenêtre de Excel reste cachée derrière la fenêtre de Visio.

Si c’est bien ça le problème, tu peux soit éviter de faire passer Visio au 1er plan (en faisant la sauvegarde via la macro sans ouvrir de menus), soit ramener Excel au 1er plan… auquel cas je suppose que tu peux utiliser une technique similaire d’ouvrir le menu d’Excel et de faire un sendkeys pour annuler la commande de menu.

Je fais passer mon document Visio en premier plan, pour ça pas de problème. Après grâce à un UserForm de type “Voulez vous : enregistrer, imprimer ou annuler” je peux choisir que faire. Pour le bouton enregistrer par exemple, j’ai procéder par SendKeyx pour qu’il m’ouvre la boite de dialogue enregistrer sous et pour que l’utilisateur puisse choisir ou il souhaite enregistrer son fichier :


Private Sub CmdEnr_Click()
Fichier = """VISIO.EXE"" ""C:UsersBOESINLADocumentsTestDessin5.vsd"""
ID = Shell(Fichier, vbMaximizedFocus)

SendKeys "%"
SendKeys "f"
SendKeys "u"
End Sub

Une fois que l’utilisateur ai fini d’enregistrer, donc dès que la boite de dialogue “enregistrer sous” a disparu, je voudrais que mon userform (enregistrer, imprimer, annuler) réapparaisse. Le problème, c’et que je ne peux pas ouvrir en même temps la boite de dialogue “Enregistrer sous” et mon UserForm. Je voulais donc savoir s’il existe un moyen de détecter quand l’utilisateur à fini d’enregistrer son document (quand la boite “enregistrer sous” se ferme) pour pouvoir ensuite réouvrir mon UserForm grace à un UserForm.Show.

J’espère que je me suis mieux expliquer que tout à l’heure.

EDIT : je pense que ton problème est plus un problème de ramener Excel au 1er plan (puis faire un userform.show) et non un problème lié au userform lui-même.

D’après ton code, je comprends que tu utilises la commande Shell pour lancer une nouvelle instance de Visio.

Le problème de Shell, il me semble, c’est qu’une fois la commande exécutée tu ne peux pas interagir avec l’application lancée via un objet. Sauf erreur de ma part, sendkeys n’est pas une interaction avec Visio mais une interaction avec Windows qui transmet l’effet des touches à l’application active.

C’est pour cela que j’ai mentionné dans mon commentaire précédent la possibilité de lancer Visio avec CreateObject. Ainsi, CreateObject te permettrait d’interagir pour de vrai avec Visio et lui envoyer de vraies commandes directement. Donc j’aurais tendance à te pousser vers CreateObject pour te donner un meilleur contrôle. Ca permettra d’exécuter des commandes sans jamais perdre le focus d’Excel.

Autre idée, si tu es d’accord avec l’idée de fermer Visio, tu dois pouvoir utiliser sendkeys pour fermer Visio. Par contre je redoute que Excel ne reprenne pas le 1er plan et que ce soit le Desktop qui prenne le focus. A confirmer…

Tu peux aussi essayer la chose suivante pour ramener le focus sur Excel :

AppActivate "Microsoft Excel"

Edité le 11/07/2013 à 15:24

Pour lancer Visio, j’utilise bien un CreateObject, seulement ça ne suffit pas à laisser l’application au premier plan, d’où le Shell. Je n’ai pas de soucis pour fermer Visio et revenir à Excel, j’ai déjà résolu ce problème.

J’ai continué à chercher de mon côté et j’opte finalement pour laisser le UserForm toujours visible, même lorsque la boite de dialogue “Enregistrer Sous” apparait. Je n’ai donc plus besoin de détecter quand la fenêtre “Enregistrer sous” se ferme. Ce n’était pas mon objetif premier mais ça rempli mon cahier des charge.

Merci pour ton aide si rapide !
A bientôt