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,

Voici un fichier démo d'une "calculette" avec recup du résultat dans une case d'un Usf

demo calculette

Ici au lieu d'utiliser un autre Usf, je préfère loger la calculette dans une Frame

Pierre

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 bien Set 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,

Rechercher des sujets similaires à "recuperation userform actif textbox"