XL 2019 Ouvrir un USF d’un autre classeur

dodineau

XLDnaute Occasionnel
Bonjour à toutes et tous.
j’ai un classeur de différentes fonctions et de différents USF qui s’ouvre automatiquement à l’ouverture d’excel mais qui est toujours masqué.
Dans un classeur 2 different je voudrais, dans une macro, ouvrir un des USF du classeur masqué. Ensuite retourner les valeurs qui seront entrées dans un textbox dans mon classeur 2 à la fermeture de ce textbox.
Je n’arrive pas à trouver la commande VBA pour le faire.
Merci pour votre aide.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faudrait déjà que le projet VBA du classeur qui définit cet UserForm porte un nom différent du sien. Si c'est "VBAProject" partout ce n'est pas possible. Alors le plus simple c'est d'invoquer par un Application.Run une procédure de l'autre classeur qui l'affiche. Avec des paramètres pour y renvoyer les valeurs des TextBox.
 

dodineau

XLDnaute Occasionnel
Bonjour,
Le projet qui s'ouvre en auto n'a pas le même nom.
J'utilise actuellement application.run pour lancer le USF mais ça ne me permet pas de le positionner différemment en fonction du classeur qui l'ouvre. En effet certains classeurs ont besoin d'avoir le USF en haut à gauche et d'autres en bas à droite. Je n'ai pas trouvé de commandes pour déplacer le USF une fois qu'il est ouvert.
 

Dranreb

XLDnaute Barbatruc
Si le projet du classeur masqué (a-t-il eu la bonne idée d'être un .xlam ?) à un autre nom, vous pourriez le cocher dans les références et l'UserForm serait connu il me semble. Les Public Sub de modules standard y seraient connues alors, en tout cas, sûr ! Plus besoin de Run pour les lancer. S'il est affiché en modal il faut le positionner avant le Show. Moi j'aime bien aussi équiper les UserForm de méthodes (ce sont simplement des Public Sub, voire des Public Function, et j'y fais souvent un Me.Show à la fin)
 
Dernière édition:

dodineau

XLDnaute Occasionnel
Le projet masqué est un ancien classeur, c'est un XLS mais il comprend des macros.
Je l'ai bien sur mis en référence dans le 2eme classeur.
Je ne peux pas le positionner avant de l'afficher puisqu'en fonction du classeur qui va l'ouvrir il devra être positionné à différents endroits. C'est justement la qu'est mon souci :)
 
Bonjour Dodineau, Dranreb, le forum
Alors le plus simple c'est d'invoquer par un Application.Run une procédure de l'autre classeur qui l'affiche. Avec des paramètres pour y renvoyer les valeurs des TextBox.
Comme a dit Dranreb, qu'est ce qui t'empêche d'envoyer en paramètres le top et le left du userform à afficher et de modifier ses propriétés avant de l'afficher ?
|édition: à moins que tu ne puisses pas modifier le classeur masqué mais, là, ça va être compliqué]

Bien cordialement, @+
 
re,

un exemple dans les fichiers joint qui permet d'ouvrir un userform dans un classeur fermé

pour l'exemple
les deux fichiers enregistrés au même endroit
tu ouvres le fichier code_autre_classeur,
tu as deux macros qui lancent chacune le même userform à une position différente
Macro_externe lance au top et left de l'appplication
Macro_externe2 lance avec un top et un left de mi application
le userform se ferme au bout 3 secondes, tu peux aussi lancer manuellement la macro de fermeture pour le fermer avant ce délai

Bien cordialement, @+
 

Pièces jointes

  • Test_Code.xlsm
    14.9 KB · Affichages: 11
  • Code_Autre_Classeur.xlsm
    15.6 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Exact.
With ProjetX.UserFormY: .StartUpPosition = 0: .Left = 200: .Top = 100: .Show: End With
Mais il faut peut être quand même revoir des choses dedans pour pouvoir en récupérer des valeurs de TextBox. Quelle est sa propriété ShowModal déjà ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 124
Messages
2 116 473
Membres
112 753
dernier inscrit
PUARAI29