Remplir un userform d'un autre classeur - VBA [Résolu]

mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 25 oct. 2012 à 18:18 - Dernière réponse : mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention
- 26 oct. 2012 à 17:29
Bonjour,
c'est mon premier message sur ce forum qui m'a bien aidéjusque la.
j'ai un classeur pour gérer un stock(que je peut modifier entièrement) et un autre pour passer des commandes(que je peut modifier un minimum).
Ma question concerne la posibilité de copier le contenu d'un combobox d'un userform du classeur de stock vers un textbox d'un userform du classeur commande.
Pour le moment mon classeur de stock ouvre l'autre et appel une macro:

'dans le classeur de stock
 Workbooks.Open (Application.ActiveWorkbook.Path & "\Base de donnée\TestCommande.xls")
 Application.Run "TestCommande.xls!mamacro" 


La macro de l'autre classeur ouvre un userform "FormEntretien":

'dans le classeur de commande, dans un module
 Public vartest As Boolean
 Sub mamacro()
 Sheets("Base").Unprotect
 vartest = True 'pour tester si le classeur stock est ouvert
 FormEntretien.Show
 End Sub


Puis dans le userform_initialize de FormEntretien:

If vartest = True Then
 Workbooks("MaintFiBiSuivi.xls").Activate
 Application.Run "MaintFibiSuivi.xls!mamacro2"
 End If


et dans le classeur de stock dans un module:

Sub mamacro2()
 MsgBox ("entrer dans mamacro2)
 Workbooks("TestCommande.xls").FormEntretien.Désignationpièce.Text = Stock.Listepiecestockmini.Text 
 End Sub


J'ai bien la msgbox qui s'affiche donc j'arive sur:

Workbooks("TestCommande.xls").FormEntretien.Désignationpièce.Text = Stock.Listepiecestockmini.Text

Je précise que FormEntretien est un UserForm et Désignationpièce est un textbox,
Stock est un UserForm et Listepiecestockmini un combobox.

et j'ai l'erreur: Erreur d'exécution '438'
Propriété ou méthode non géré par cette objet.
Je suppose que c'est ma synthaxe qui n'est pas bonne.
Et si ça marche j'aurais plusieurs control à copier.
Désolé c'est un peu long mais je voulais être le plus précis possible.
Merci pour vos futurs réponses.

mimi35garry vous salut bien
Afficher la suite 

5 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 26 oct. 2012 à 08:18
+2
Utile
Je me suis réveillé en ne pouvant m'empêcher de penser à la solution la moins tortueuse.
Voilà celle qui m'est venue à l'esprit :
- une feuille "Tremplin" de ton classeur Cl2 (celui ouvert par ta commande Open) entièrement dédiée à recevoir en sa colonne A les données à insérer dans les textboxes de son UserForm1
- Pour chaque textbox concernée : utiliser sa propriété ControSource
Ex avec 3 textboxes textbox1, textbox2 et textbox3, mettre dans leur propriété ControlSource :
tremplin!A1 pour la texbox1
tremplin!A2 pour la texbox2
tremplin!A3 pour la texbox3
En modifiant dès lors ces valeurs (dans la colonne A de la feuille tremplin de ton classeur Cl2 (ce qui est facilement réalisable depuis ton classeur 1) tu modifies ipso-facto le contenu des textboxes de ton userform.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 oct. 2012 à 19:55
0
Utile
Bonjour,
Tu ne peux te référer ainsi au UserForm d'un autre classeur.
Il te faut nécessairement passer par le_classeur.VBProject.VBComponents
aperçu/exemple :
Dim d, u
For Each d In Workbooks("Classeur2.xlsm").VBProject.VBComponents
 If d.Name "UserForm1" Then Set u d
Next
MsgBox TypeName(u) & " nommé " & u.Name

Mais les choses vont à partir de là devenir encore plus acrobatiques, du fait que le vbcomponent u ne pourra jamais être typé comme un UserForm et que tu ne pourras donc utiliser une expression du genre u.textbox1.text = "coucou"
Il te conseille vivement de chercher d'autres voies que celle que tu as envisagée.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 25 oct. 2012 à 21:14
0
Utile
Bonjour,
merci de ta réponse.
Donc il vaut mieux que je me dirige vers par exemple copier mes données sur une feuille et ensuite les rapatriées dans mon userform ?
J'ai testé le bout de code et il marche bien.
J'ai vu qu'il existais VBProject.Collection que je n'ai pas réussi à utilisé mais je vais retenter.
Donc apparament il n'existe rien capable d'utilisé les controls d'un userform d'un autre classeur, dommage...
Merci encore.
mimi35garry vous salut bien
Commenter la réponse de mimi35garry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 oct. 2012 à 23:00
0
Utile
Je n'ai pas dit que c'était impossible et qu "il n'existait rien" ! Mais le chemin serait tel et tellement scabreux que je déconseille très vivement de se lancer sur un tel chemin, qui tendrait à la construction d'une usine à gaz.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 26 oct. 2012 à 17:29
0
Utile
Merci, désolé pour le "rien", c'étais "rien de facile et rapide" :)
Je vais faire comme tu me l'a suggéré.
Merci encore.


mimi35garry vous salut bien
Commenter la réponse de mimi35garry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.