Manipuler les objets dans USF VBA Excel 2003

Fermé
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 18 mai 2012 à 10:27
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 18 mai 2012 à 13:37
Bonjour,

Dans mon appli en cours de réalisation je crée dynamiquement des TextBox dans un Userform.
Voici le code :

Private Sub CommandButton1_Click()
Dim Obj As Control
Dim Cl As Classe1
Dim i As Byte
Set Collect = New Collection
'
For i = 1 To 7 'Boucle pour la création des 7 TextBox
    Set Obj = Me.Controls.Add("forms.Textbox.1")
        With Obj
            .Name = "TextBox" & i
            .Object.Text = .Name 'Pour contrôler le nom des TextBox créés
            .Left = 70 * i + 10
            .Top = 30
            .Width = 50
            .Height = 15
            .BackColor = &HC0FFFF
            .BorderStyle = 1
            .FontName = "arial"
            .FontBold = True
            .FontSize = 9
            .Enabled = False
        End With
'
    'Ajout de l'objet dans la classe
    Set Cl = New Classe1
    Set Cl.textbox = Obj
    Collect.Add Cl
Next i
'
End Sub



Par défaut la largeur est définie à 50. Cependant j'ai besoin de pouvoir "manipuler" ces TextBox pour leur assigner une largeur spécifique, donc un positionnement horizontal sur l'USF également spécifique...

Je ne parviens pas à faire cela en utilisant le nom de ces nouveaux TextBox créés...

Quelqu'un peut-il me venir en aide ?

Merci par avance...


A voir également:

2 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
18 mai 2012 à 10:47
Salut,
Je vais peut-être répondre indirectement, mais personnellement au lieu de m'embêter avec des créations d'objets dans un userform, je préfère les rendre visibles ou invisibles en fonctions des actions de l'utilisateur.

Plus de travail en amont mais gestion facilitée par la suite.

Bon courage,
A+
0
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 13
18 mai 2012 à 10:59
Merci pour ta réponse Morgothal...

J'ai aussi pensé à cette solution (que je n'exclue d'ailleurs pas), mais d'une part le nombre de "lignes" contenant ces TextBox dynamiques est aléatoire et, d'autre part... je dois l'avouer, je suis novice en VBA et je souhaite explorer le maximum de possibilités dans la programmation.

En attendant j'ai trouvé le code à utiliser pour manipuler mes objets créés, à savoir (si cela t'intéresse) :

   ...
    Me.Controls("TextBox1").Left = 66
    Me.Controls("TextBox1").Width = 138
    Me.Controls("TextBox2").Left = 210
    Me.Controls("TextBox2").Width = 108
    Me.Controls("TextBox3").Left = 324.05
    Me.Controls("TextBox3").Width = 150
    Me.Controls("TextBox4").Left = 480
    Me.Controls("TextBox5").Left = 540.05
    Me.Controls("TextBox6").Left = 600.05
    Me.Controls("TextBox7").Left = 660
    Me.Controls("TextBox7").Width = 60
    ...


Ensuite il suffit de boucler pour remplir les TextBox des infos à y lire...
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
18 mai 2012 à 11:14
Ah bah très bien :)
Par contre je ne vois pas comment tu peux faire pour dynamiser tes textbox en fonction de ce que l'utilisateur inscrit dedans ?
A moins de compter les caractères et d'adapter tes TB en fonction...
0
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 13
18 mai 2012 à 13:37
En fait les TextBox se remplissent automatiquement à partir de données présentent sur une feuille Excel.

J'ai pas mal avancé et parviens maintenant à créer dynamiquement dans mon USF des lignes contenant des TextBox.

Cependant ça marche même trop bien puisque la macro en créé bizarrement plus qu'il ne faut...

J'ignore si tu es en capacité de m'aider là-dessus...

Ci-dessous mon fichier test contenant la macro

https://www.cjoint.com/?BEsnJuBEPB5
0