Sub _change à nom variable

Bonjour à tous,

Je travaille sur un UserForm et sur une de mes pages de cet UserForm, j'ai une TextBox qui, quand on en change la valeur (TextBox_Change), créé autant de TextBox que la valeur renseignée. Ces nouvelles TextBox sont ainsi nommées "Bat1", "Bat2", etc. Je souhaite maintenant, sur le même principe, renseigner le nombre d'étage de chaque bâtiment et créer autant de TextBox ("Bat1E1", "Bat1E2", etc.).

Mon problème est donc que pour utiliser l'événement TextBox_Change, j'ai besoin de connaître le nom de la TextBox concernée, mais je ne peux pas savoir à l'avance combien j'en aurais. J'aimerais donc savoir s'il existait un moyen de faire quelque chose comme "Bat"i_Change et avoir donc un événement qui s'adapte à une variable.

En espérant avoir été assez clair,

bonjour,

pour cela il faut utiliser des modules de classe.

Merci. Ne connaissant absolument pas le fonctionnement des classes, je vais me renseigner.

Après recherches, j'ai l'impression que je devrais me diriger vers ce genre de code mais j'ai du mal à comprendre ce qu'il fait exactement et donc si c'est bien ce que je recherche.

Public Parent As MSForms.UserForm
Public WithEvents TBx As MSForms.TextBox

Private Sub TBx_Change()

Parent.TBx_Change Me

End Sub

Pourriez vous m'éclairer svp ?

Merci, j'ai pu commencer à trouver une solution.

Mon module de classe :

Option Explicit

Private WithEvents mTbo As MSForms.TextBox

Sub Init(Item As MSForms.TextBox)
  Set mTbo = Item
End Sub

Public Sub mTbo_Change()
Dim cont As Control
Dim cont2 As Control
Dim nbEtage As Integer

If mTbo.Value = "" Then
    nbEtage = 0                    'mise à jour si nul
Else
    nbEtage = mTbo.Value
End If

Fenetre_Creation.MultiPage1.Value = 1
For k = 1 to nbBat                'Variable définie précédemment et qui permet d'indicer les bâtiments 
For j = 1 To nbEtage ' nb de txtbox à créer, renseigné par l'utilisateur
    Set cont = Fenetre_Creation.CadreBat.Controls.Add("Forms.TextBox.1") ' ecriture des box suivant nombre
        With cont
            .Name = "Bat" & k & "Etage" & j
            .Height = 20
            .Width = 80
            .Left = 40 + (j - 1) * 100
            .Top = 125
            .BackColor = RGB(0 + j * 20, 60, 255) 'Couleur de fond
        End With

   'idem pour une deuxièmpe rangée de TextBox
    Set cont2 = Fenetre_Creation.CadreBat.Controls.Add("Forms.TextBox.1")

       With cont2
          .Name = "LgtsBat" & k & "Etage" & j
          .Height = 20
           .Width = 80
           .Left = 40 + (j - 1) * 100
            .Top = 155
            .BackColor = RGB(0 + j * 40, 200, 200) 'Couleur de fond
        End With
Next
Next
End Sub

Comme les TextBox qui permettent de créer celles décrites au dessus dépendent elles-mêmes d'une autre valeur, elles n'existent pas à l'initialisation de la TextBox. J'aimerais les soumettre au module de classe dès leur création mais je me retrouve face à des erreurs.

Partie du code concernée :

Private Sub NbreBat_Change()

Dim ctrl25 As Control
Dim nbBat As Integer
Dim mTbos As Collection
Dim c As MSForms.Control
Dim tbo As ManagedTBO

Set mTbos = New Collection

Fenetre_Creation.CadreBat.Controls.Clear

If NbreBat.Value = "" Then
    nbBat = 0
Else
    nbBat = NbreBat.Value
End If

Fenetre_Creation.MultiPage1.Value = 1

For i = 1 To nbBat
Set ctrl25 = Fenetre_Creation.CadreBat.Controls.Add("Forms.TextBox.1")

       With ctrl25
          .Name = "EBat" & i
          .Height = 20
           .Width = 120
           .Left = 200
            .Top = 100 + (i - 1) * 80
            .BackColor = RGB(0 + i * 40, 0, 160) 'Couleur de fond
        End With

        ctrl25.Select

        Set tbo = New ManagedTBO
        tbo.Init ctrl25
        mTbos.Add tbo
Next
End Sub

ManagedTBO étant le nom de mon module de classe.

Merci d'avance pour votre aide,

Rechercher des sujets similaires à "sub change nom variable"