Userform variable

GHISLAIN

XLDnaute Impliqué
Bonjour les exceliens et exceliennes,

Voila je cherche à utiliser le nom d'userform en variable , j'ai trouvé pour afficher l'userform mais je ne parviens pas à utiliser le textbox du dit userform:

Dim formName As String
formName = "UserForm1"
Dim DForm As Object


'pour l'afficher c'est bon
Set DForm = UserForms.Add(formName)
UserForms.Add(formName).Show

'pour ecrire dans le textbox ca ne fonctionne pas
UserForms.Add(formName).textbox1="toto"

Merci à tous pour vos suggestions

Bien amicalement

Ghislain
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Information: le nom d'un UserForm est un type d'objet. On ne l'utilise en général pas comme tel parce que son nom est aussi accepté comme exemplaire par défaut de lui même. Ne surtout pas créer d'UserForm identiques, c'est absurde vu qu'il est très facile d'afficher simultanément d'un UserForm autant d'exemplaires qu'on veut (s'il a ShowModal à False bien entendu).
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pour en revenir à votre mystérieuse demande, ceci devrait marcher :
VB:
Sub Test()
   Dim FormName As String
   FormName = "UserForm1"
   With UFmNommé(FormName)
      .TextBox1.Text = "TOTO"
      .Show
      End With
   End Sub
Function UFmNommé(ByVal Nom As String) As Object
   For Each UFmNommé In UserForms
      If UFmNommé.Name = Nom Then Exit Function
      Next UFmNommé
   On Error Resume Next
   Set UFmNommé = UserForms.Add(Nom)
   If Err Then MsgBox "Il n'existe pas de définition d'UserForm """ & Nom & """.", vbCritical, "UFmNommé"
   End Function
Ça devrait permettre de réaccéder aux UserForm même masqués mais demeurés chargés quel que soit leur ShowModal. Mais leur fermeture par la croix pendant un .Show les décharge, et, invoquée par la suite, ma fonction UFmNommé en chargerait alors un nouvel exemplaire.
De toute façon ce n'est sûrement pas le genre de programmation que je mettrais en place dans mes réalisations…

Édition. Remarque: Si plusieurs exemplaires d'un même UserForm ont été créés par ailleurs, notamment par UserForms.Add(…, (comme dans le code cité dans le message #1, où 3 exemplaires d'un "UserForm1" sont créés, le 1er étant récupéré en tant que variable DForm, le 2ième affiché aussitôt et le 3ième dont la TextBox1 reçoit "toto"), cette fonction UFmNommé renvoie le premier d'entre eux. S'il n'en existe aucun, elle crée d'abord celui qu'elle va renvoyer.
 
Dernière édition:

Discussions similaires