Nommer une textbox programmatiquement

Bonjour à tous,

J'ai crée sur ma feuille Excel un simple bouton qui ouvre le userform ci-dessous:

userform test

Voici le code contenu dans ce USF:

Sub CommandButton1_Click()
    Dim nb_textbox As Integer
    Dim ctrl As Control

    nb_textbox = 0

    For Each ctrl In UserForm_test.Controls
        If TypeOf ctrl Is msforms.TextBox Then
            nb_textbox = nb_textbox + 1
        End If
    Next

    For i = 1 To nb_textbox
        With Sheets("Feuil1").Cells(i, 2).Borders
            .LineStyle = x1dashdotdot
            .Weight = 2
        End With
        Sheets("Feuil1").Cells(i, 2).Value = Controls("TextBox" & i).Value
    Next
     Unload Me
End Sub

Private Sub Label1_Click()
    Dim userform_control As Control

    UserForm_test.Height = UserForm_test.Height + 40

            Set userform_control = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox" & nb_textbox, True)
            With userform_control
            .Height = 24
            .Top = 186 + variable_top
            .Width = 78
            .Left = 12
            End With
            variable_top = variable_top + 30
End Sub

Si j'entre des valeurs dans les textbox originales et que je clique sur "valider", elles sont automatiquement placées dans les cases correspondantes de la feuille Excel. Par contre, si je clique sur le bouton "Rajouter" et qu'ensuite je clique sur "Valider", le message "objet spécifié introuvable" apparait. L'erreur semble se situer lors de la création d'un nouveau textbox, le nom n'étant pas du format "Textbox1/2/3/..." comme les autres textbox créees directement sur le formulaire.

Ma question:

Comment faire en sorte que le nom de la textbox créee par VBA soit du format "TextBoxnuméro" ? Par exemple si j'ai 5 TextBox fixes nommées "TextBox1" à "TextBox5", j'aimerai que la TextBox crée via le bouton "Rajouter" soit automatiquement nommée "TextBox6".

J'espère avoir été assez clair dans ma question et merci d'avance pour votre aide !

Bonjour,

Peur d'avoir mal compris la question tellement ça parait simple ...

.Name ?

eric

Bonjour,

Merci pour ta réponse rapide! Je pense que tu as bien compris la question pas de souci ^^

J'ai essayé 2 approches en fait:

1- modifier le nom du nouveau userform directement sur cette ligne:

 Set userform_control = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox" & nb_textbox, True)

2- Comme tu l'as suggéré, directement dans le bloc with/end with:

     Set userform_control = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox", True)
            With userform_control
            .Height = 24
            .Top = 186 + variable_top
            .Width = 78
            .Left = 12
            .Name = "TextBox" & nb_textbox
            End With

Mon souci n'est pas de nommer la textbox "TextBox", mais surtout d'y inclure la variable qui prend la valeur du nombre total de textbox dans le userform (d'où mon misérable essai avec "TextBox" & nb_textbox ).

il ne manque pas un +1 ?

Je ne pense pas (j'ai quand même essayé) car lors de la création de la nouvelle textbox via l'intitulé "Rajouter", la variable nb_textbox est automatiquement incrémentée de 1 :

For Each ctrl In UserForm_test.Controls
        If TypeOf ctrl Is msforms.TextBox Then
            nb_textbox = nb_textbox + 1
        End If
    Next

Par exemple, vu que j'ai déjà 5 textbox sur l'userform (nom: TextBox1 à TextBox5), nb_textbox prend la valeur 6 si une seule textbox est rajoutée, 7 si on en rajoute 2 ext... j'ai testé ca d'abord en utilisant un msgbox.

dans la ligne de code suivante, je spécifie bien le nom de la nouvelle textbox, mais la syntaxte à pas l'air bonne ("TextBox" & nb_textbox). Si je voulais limiter le nombre de textbox à rajouter à 1, il suffirait d'écrire "TextBox6" pour le nom et ca marcherait sans problème.

Set userform_control = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox" & nb_textbox, True)

Ah là je ne saurais pas te dire.

reste avec le With

Pas de souci merci quand même pour tes suggestions!

J'ai trouvé une solution au problème, c'est un peu spartiate et le code est assez moche mais au moins ca fonctionne J'ai créer 4 contrôles "Intitulé" dont le caption est "Rajouter" pour tous. Je les ai tous superposé les uns sur les autres; lors du clique sur le 1er "Rajouter", un textbox (dont le nom est TextBox6) est crée puis ce label passe en mode invisible pour laisser place au 2eme label qui contient le même code pour crée un autre textbox (TextBox7) et ainsi de suite... En gros ca donne l'illusion de cliquer sur le même intitulé "Rajouter" sauf qu'il y'en a 4.

Ca ressemble à ca :

Private Sub Label_rajouter1_Click()
    Dim userform_control As Control
    UserForm_test.Height = UserForm_test.Height + 40
            Set userform_control = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox6", True)
            With userform_control
            .Height = 24
            .Top = 186
            .Width = 84
            .Left = 6
            End With
    UserForm_test.Label_rajouter1.Visible = False
    UserForm_test.Label_rajouter3.Visible = False
    UserForm_test.Label_rajouter4.Visible = False
    UserForm_test.Label_rajouter2.Visible = True

End Sub

Private Sub Label_rajouter2_Click()
    Dim userform_control2 As Control
    UserForm_test.Height = UserForm_test.Height + 40
            Set userform_control2 = UserForm_test.Controls.Add("Forms.TextBox.1", "TextBox7", True)
            With userform_control2
            .Height = 24
            .Top = 216
            .Width = 84
            .Left = 6
            End With
    UserForm_test.Label_rajouter1.Visible = False
    UserForm_test.Label_rajouter2.Visible = False
    UserForm_test.Label_rajouter4.Visible = False
    UserForm_test.Label_rajouter3.Visible = True
End Sub
Rechercher des sujets similaires à "nommer textbox programmatiquement"