Nommer une textbox programmatiquement
Bonjour à tous,
J'ai crée sur ma feuille Excel un simple bouton qui ouvre le userform ci-dessous:
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
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