piloter un userform depuis un autre classeur

  • Initiateur de la discussion Initiateur de la discussion daniel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

daniel

Guest
Bonjour le forum,


Quelle instruction VBA permet d'accéder à un userform, ses propriétés (hauteur, largeur...) et ses composants, depuis un code contenu dans un autre classeur ?

Par exemple, si je veux 'exécuter' depuis le classeur ne contenant pas le userform la commande suivante :

Code:
userform1.commandbutton1.Font.Bold = False

Merci pour votre aide



Daniel 🙂
 
Salut Daniel,

Dans ton classeur principal, tu mets ce code (il faut que ton classeur contenant ton UserForm se nomme 'Classeur2' et que ton User Form se nomme 'UserForm1').
Le nom des properties se trouve dans les fenêtres ad-hoc


Set MonUserForm = workbooks('Classeur2').VBProject.VBComponents.Item('UserForm1')
TempForm.Properties('Caption') = 'toto'

Papaye
 
Hello !

Merci pour ta réponse, mais cela ne fonctionne que si le userform est ouvert dans le VBE. Or, je voudrais utiliser cette méthode pour piloter (toujours depuis un autre classeur) la taille de mon userform lors de son affichage

Si tu as d'autres idées...

Bon après midi

Daniel
 
hello,

merci de t'intyeresser à mon problème... En fait, voilà ce que je voudrais faire : dans le classeur1 avec userform1, j'ai une procédure :

sub hauteuruserform1

userform1.height=400
userform1.show

end sub


depuis un autre classeur2, je désirerais appeler cette procédure mais avec le nom de l'userform en 'variable' (ex: nomuserform).

Exemple

sub hauteuruserformdepuisclasseur2

nomuserform.height=400
nomuserform.show

end sub

Comment indiquer que la variable 'nomuserform' doit correspondre au userform1 de classeur1 ?


J'espère que je ne suis pas trop confus...


Merci

Daniel
 
Alors, alors ...

Si je comprends bien :
tu désires lancer une macro d'un classeur 1 à partir d'un classeur 2.

Ton problème c'est de lancer cette macro avec un certain nombre de paramètres (quel USF ?, taille de USF, ...)

J'ai bon ?

Papaye
 
Salut Daniel,

Dans ton classeur principal, tu mets ce code (il faut que ton classeur contenant ton UserForm se nomme 'Classeur2' et que ton User Form se nomme 'UserForm1').
Le nom des properties se trouve dans les fenêtres ad-hoc


Set MonUserForm = workbooks('Classeur2').VBProject.VBComponents.Item('UserForm1')
TempForm.Properties('Caption') = 'toto'

Papaye
Bonjour Papaye
je suis tombé par hasard sur votre conversation, étant curieux et autodidacte en VBA, j'ai voulu tester votre code
Set MonUserForm = Workbooks(Clas).VBProject.VBComponents.Item("UserForm4")
-> blocage = l'accès par programme au projet Visual-Basic n'est pas fiable!
en fait je cherche un code VBA me permettant d'énumérer le nombre d'userforms d'un autre classeur ouvert genre
X= windows(nomclasseur).userform.count
auriez-vous une solution?
phjln972@gmail.com
 

au​

Salut Daniel,

Dans ton classeur principal, tu mets ce code (il faut que ton classeur contenant ton UserForm se nomme 'Classeur2' et que ton User Form se nomme 'UserForm1').
Le nom des properties se trouve dans les fenêtres ad-hoc


Set MonUserForm = workbooks('Classeur2').VBProject.VBComponents.Item('UserForm1')
TempForm.Properties('Caption') = 'toto'

Papaye
Cliquez pour agrandir...
Bonjour Papaye
je suis tombé par hasard sur votre conversation, étant curieux et autodidacte en VBA, j'ai voulu tester votre code
Set MonUserForm = Workbooks(Clas).VBProject.VBComponents.Item("UserForm4")
-> blocage = l'accès par programme au projet Visual-Basic n'est pas fiable!
en fait je cherche un code VBA me permettant d'énumérer le nombre d'userforms d'un autre classeur ouvert genre
X= windows(nomclasseur).userform.count
auriez-vous une solution?
phjln972@gmail.com
Bonjour Papaye
je suis tombé par hasard sur votre conversation, étant curieux et autodidacte en VBA, j'ai voulu tester votre code
Set MonUserForm = Workbooks(Clas).VBProject.VBComponents.Item("UserForm4")
-> blocage = l'accès par programme au projet Visual-Basic n'est pas fiable!
en fait je cherche un code VBA me permettant d'énumérer le nombre d'userforms d'un autre classeur ouvert genre
X= windows(nomclasseur).userform.count
auriez-vous une solution?
phjln972@gmail.com
 

au​


Bonjour Papaye
je suis tombé par hasard sur votre conversation, étant curieux et autodidacte en VBA, j'ai voulu tester votre code
Set MonUserForm = Workbooks(Clas).VBProject.VBComponents.Item("UserForm4")
-> blocage = l'accès par programme au projet Visual-Basic n'est pas fiable!
en fait je cherche un code VBA me permettant d'énumérer le nombre d'userforms d'un autre classeur ouvert genre
X= windows(nomclasseur).userform.count
auriez-vous une solution?
phjln972@gmail.com
solution .... oui il n'y en a qu'une seule
aller tout simplement cocher la case Accès approuvé au modèle d'objet du project vba dans les options
1737571224910.png


pour en revenir a la question initiale
en effet il faut passer par les vbcomponents mais pas que
il faut ensuite inscrire le vbcomp dans la collection userforms (utiliser une variable object )
et vous pourrez le piloter même quand il est affiché ce qui est le besoins me semble t il puisque l'on parle de redimensionnement par raport à l'écran
 
re une autre méthode et finalement celle que je préfère c'est le referencement au classeur
Comment pliloter le userform d'un autre classeur

je vais vous expliquer comment il faut faire

dans le classeur ou se trouve votre userform
1°allez dans les propriété du vbproject
2°et donnez lui un autre nom que celui par defaut qui est à la base "VBAPorject" on va l'appeler "Gogo" par exemple
3°ajoutez un module dans ce classeur si il n'y en a pas
4° dans ce module on va instancier une variable userform (Public leuserform as New Userform1)'remplacez Userform1 par le vrai nom de votre userform

Dans le classeur appelant maintenant
1°allez dans les references et activer la ref "Gogo"
2°il ne vous reste plus qu'a vous servir de la variable "leuserform"

une fois ces manoeuvres faites fermez et enregistrez vos deux classeurs

désormais quand vou ouvrirez votre classeur appelant le classeur de l'userform s'ouvrira avec

et donc dans un module du classeur appelant mettez ceci pour tester
exemple
Sub test
with leuserform
.show 0
.move 50,10,500,500

end with
end Sub

il est bien entendu possible d'activer ou déactiver la reference à gogo dynamiquement de facon a ne pas être obligé de demarrer les deux classeur en même temps si on en a pas besoins

bonne soirée
patrick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour