Utiliser des variables dans le nom d'un contrôle

Bonjour

J'ai bien vu l'information indiquée ici : https://www.excel-pratique.com/fr/astuces_vba/nom-controle-variable

Cela fonctionne parfaitement lorsque le code est placé dans le Userform contenant le contrôle.

Mais quelle syntaxe utiliser lorsque le code est placé ailleurs que dans le Userform contenant le contrôle ?

Merci

Je viens de trouver qu'il fallait ajouter le nom du Userform avant Controls, soit :

Userform_01.Controls et non Controls tout court

Cependant un nouveau problème se pose : comment indiquer de manière générique (donc sans donner son nom) le Userform qui est actif ?

Merci

Bonjour,

tu peux expliquer plus en détail ta problématique et ce que tu veux faire ?

Si ton Userform est modal seuls ses événements sont actifs, tu sais où tu es et le code ne peut continuer que sur fermeture de l'UF

S'il est non modal tu peux mettre me.name dans une variable Public lors de son événement Initialize . Bizarrement, selon mes tests, l'Activate n'est pas exécuté dans ce cas ?!?. Deactivate non plus, ce qui oblige à la décharger complètement (Unload Me) et mettre "" dans la variable à ce moment.
eric

Bonjour

Mon Userform est modal et je souhaite intervenir dessus alors qu'il est affiché par Userform.Show.

Mais le code pour intervenir sur le contrôle du Userform est dans la partie Module1 du classeur.

J'espère avoir été clair mais ce n'est pas sûr.

Merci

Bonjour

N'y aurait-il pas tout simplement une instruction du style UserformQuiEstActif que l'on pourrait utiliser en lieu et place du nom de ce Userform ?

Merci

Désolé mais je ne comprend pas plus le besoin.
S'il est modal, le seul code qui peut s'exécuter est SON code, tu sais donc où tu es et c'est lui qui est actif.
Son nom est Me.Name

Bonjour

Pendant qu'il est actif, j'ai des Sub qui tournent et qui ne sont pas dans le code rattaché au Userform mais dans le code du Module1.

Et je ne souhaite pas changer cette configuration...

Merci

Je veux bien voir un tel fichier (anonymisé) pour comprendre.
Pour moi ton code ayant affiché le userform modal est suspendu tant qu'il reste affiché. Il ne reprend que lorsqu'il est fermé (et donc plus actif...).
eric

Bonjour

Désolé je travaille sur un ordinateur spécifique et celui-ci n'a pas Excel.

J'ai bien une solution qui consiste à indiquer nominativement le nom du Userform, ça marche mais c'est lourd à gérer.

C'est pour cela que je cherche une solution générique.

Si j'ai le nom du Userform dans une variable ce qui est facile avec Me.Name, comment rédiger pour qu'il prenne en compte le Userform en lui donnant son nom au travers de cette variable ?

Toute la question est là !

Merci

Bonjour,

Une piste en passant : déclarer l'UserForm :

'EXEMPLE MODULE
Public usf 'Ou Dim

Sub ouverture()
    Set usf = New UserForm1
    usf.Show
End Sub

Sub exemple()
    usf.TextBox1 = "Démo"
End Sub
'EXEMPLE USERFORM
Private Sub UserForm_Click()
    exemple
End Sub

Cordialement,

Bonjour

En fait il me faudrait l'équivalent de Application.ActiveSheet pour désigner le Useform qui est actif... mais je ne trouve pas.

Merci

re

bonjour

@sébastien Attention en instanciant un userform avec "as new userform1" tu instancie une classe du module userform (car ça en est un de module classe )

et en public dans un module ça implique une lourde charge et ses descendant(controls,variable(dans le userform ne seront pas forcement accessibles)

car un module classe n'a pas d'enfant controls ActivX

c'est un casse tète quand on ne maîtrise pas la notion de classe intra ou extra userform

re

En fait il me faudrait l'équivalent de Application.ActiveSheet pour désigner le Useform qui est actif... mais je ne trouve pas.

Merci

tu créée tout simplement une variable public object

en haut de module standard

on instancie une variable object 'ou As userform (mais PAS "As new" sinon c'est UNE CLASSE !!!!!!!)

et tout le monde sait que dans une classe toutes les propriété ne sont pas accessibles

public myform as object ' utilisation possible dans tout  module y compris l'userform lui même 

dans le activate de l'userform !!!!!!!!!!!!!!!!

set myform=me

a partir de la myform sera l'userform actif

cette ligne peut etre dans plusieurs userforms c'est le dernier qui l'aura exécuté dans son activate qui sera l'userform actif donc myform

et donc son exploitation se fera avec cette variable

ex:

sub test()'ecriture
myform.textbox1="toto"
end sub

sub test2()'lecture
msgbox myform.textbox2.value
end sub

As-tu testé ce que je t'indiquais dans mon 1er post

dans un module standard :
Public UF_Actif As String

dans tes UF :

Private Sub UserForm_Activate()
    UF_Actif = Me.Name
End Sub

Private Sub UserForm_Deactivate()
    UF_Actif = ""
End Sub

Ou bien sur l'objet :
Public UF As Object
et
Set UF = Me
et Set UF = Nothing

@eriiiic

Je veux bien voir un tel fichier (anonymisé) pour comprendre.

Pour moi ton code ayant affiché le userform modal est suspendu tant qu'il reste affiché. Il ne reprend que lorsqu'il est fermé (et donc plus actif...).

eric

allons allons

comment ferait on pour appeler des subs ou fonctions dans les modules alors ???!!!!

ça n'est que la macro appelante(ouvrant le userform) qui est stoppée et cela que se soit sous instance en classe ou en variable object( ou userfom)

exemple

ici le message s'affichera uniquement lors du hide ou unload de l'userform

Sub test3()
myform.Show
MsgBox "coucou eriiiic"
End Sub

on peut enrayer ce phénomène en créant un event raizeevent mais jouant avec cette notion de classe je n'ai jamais eu a le faire mais j'ai déja vu quelques exemples

de la même manière d'ailleurs qu'un event feuille par exemple peut être géré dans un userform (je le redis un module userform est module classe avant tout)

Merci à tous.

La solution de PatrickToulon fonctionne parfaitement !

J'ai finalement créé la variable Userform_actif et c'est super génial !!!

Encore merci

Bonjour Patrick,

que cherches-tu à m'expliquer ?

ici le message s'affichera uniquement lors du hide ou unload de l'userform

c'est ce que j'ai dit non ?

J'ai plutôt dans l'idée qu'un même sub est appelé depuis plusieurs Userform mais comme il a du mal à lâcher les infos et donner les détails...
eric

Bonjour

Je lis "mais comme il a du mal à lâcher les infos et donner les détails..."

Je ne cherche pas à cacher quoi que ce soit, c'est juste que je suis débutant, je n'ai pas du tout votre niveau et je ne comprends pas toujours les considérations techniques dont vous parlez.

Le pire c'est qu'à chaque fois que j'explique mes problèmes je suis persuadé que je fais cela de manière claire... mais en fait apparemment ce n'est pas le cas.

C'est le genre de situation où on est capable de bien expliquer la situation que lorsqu'on est capable de la résoudre !

Encore merci !

re

@eriiiic

oui tu a raison après relecture tu parles bien de la sub appelante au temps pour moi

@Excel-75011
Disons que plus tu donnes de détails, plus on voit clair sur le besoin.
Et selon les cas plusieurs alternatives peuvent alors s'ouvrir, ou au contraire se refermer.

@patrick
pas grave, j'aurais pu ne pas avoir été clair, ou mal comprendre un élément de ta réponse :-)
eric

Rechercher des sujets similaires à "utiliser variables nom controle"