Remplir un userform d'un autre classeur - VBA

Résolu
mimi35garry Messages postés 21 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 8 février 2013 - 25 oct. 2012 à 18:18
mimi35garry Messages postés 21 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 8 février 2013 - 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

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 oct. 2012 à 08:18
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
2
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 oct. 2012 à 19:55
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
0
mimi35garry Messages postés 21 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 8 février 2013
25 oct. 2012 à 21:14
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 oct. 2012 à 23:00
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mimi35garry Messages postés 21 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 8 février 2013
26 oct. 2012 à 17:29
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
0
Rejoignez-nous