Récupération Userform actif et Textbox Actif
bonjour,
j'ai actuellement 3 userform que j'utilise dans mon fichier excel, avec différent textbox à remplir dans chaque.
j'ai un 4ème userform de créer que je peux ouvrir quand je suis dans un textbox (et que je clique sur la touche F9) d'un des 3 autres userform.
(ce 4ème userform est une sorte de calculatrice)
je souhaiterais maintenant récupérer la valeur du textbox de ce 4ème userform, pour le mettre dans le userform ACTIF et dans le textbox ACTIF (la ou j'ai fais F9).
actuellement j'ai fais ça quand je clique sur mon bouton OK pour fermer mon 4ème userform :
frm1.TxtCoef.Text = TxtResultat.text
sauf du coup ça ne marche que pour un seul textbox d'un seul userform. Comment faire pour que ça marche dans tout les textbox de tout les userform.
Bonjour pierrep56, désolé j'ai été coupé dans ce que je faisais.
d'abord merci pour votre réponse, le fichier est très intéressent et je pense qu'il pourras me servir pour d'autre chose, et à l'avenir j'essayerais de penser aux frames.
Cependant pour mon fichier actuel je souhaiterais vraiment récupérer les donner d'un userform. Car il y a plusieurs userform différent pour différent textbox, j'ai passé un temps fou à le faire, je ne voudrais pas tout recommencer dans des frames. vous n'auriez pas une idée ?
Ok, une solution est de passer par une variable publique pour stocker le textbox "actif" appelant:
- Au début d'un module ordinaire :
Public MonTextbox as Object
- A l'ouverture du userform4, et en fonction de l'usf appelant :
Set MonTextbox = Userform1.TextboxBidule
ou bienSet MonTextbox = Userform2.TextboxMachin
- Au clic du ok :
MonTextbox.value = TxtResultat.text
Ou un truc dans le genre
Pierre
Bonjour Koshi, bonjour pierrep56,
Il est peut-être également possible de cibler les userforms en fonction de leur index :
userforms(userforms.count - 1) est a priori l'userform actif, le dernier chargé.
userforms(userforms.count - 2) serait l'userform appelant.
Ce qui présente l'avantage d'utiliser certaines propriétés inutilisables sinon et de "variabiliser" le code.
On peut charger le 4è userform de la sorte et affecter sa propriété .tag (ou une propriété définie sur ce nouvel userform) pour y stocker le nom du contrôle appelant :
Sub OuvrirUF4depuiscontrolActif()
sCtrlName$ = userforms(userforms.count - 1).activecontrol.name 'nom du controle actif de l'UF actif (avant chgt 4e UF)
with VBA.userforms.add("nomuf") 'chgt du 4e UF
.tag = sCtrlName 'Stocke le nom du ctrl actif
.show 'affiche
end with
end sub
Et reporter ensuite la valeur :
Sub test()
with userforms(userforms.count - 1) 'avec UF actif (le 4è)
userforms(userforms.count - 2).controls(.tag).value = .TxtResultat.text 'le controle appelant de l'UF appelant vaut le texte de TxtResultat
unload userforms(userforms.count - 1) 'dechgt
end with
end sub
Cdlt,