[VB] Récupérer des contenus de TextBox

Bonjour,

Je n'arrive pas à récupérer le contenu de TextBox créés dynamiquement. Il faudrait que j'arrive à stocker les valeurs entrées par l'utilisateur dans les différents TextBox dans un tableau. Voici le code que j'utilise pour générer les TextBox:

NbS est le nombre de TextBox souhaitées que l'utilisateur précise dans un précédent formulaire.

For i = 1 To NbS.Text
MonTextBox = New TextBox
MonTextBox.Name = "TextBox" & NumeroTextBox
Form2.Controls.Add(MonTextBox)
MonTextBox.Size = New Size(50, 25)
MonTextBox.Location = New Point(Form2.Width / 2 - 25, 25 * i)
MonTextBox.Visible = True
NumeroTextBox = NumeroTextBox + 1
Next

Je veux ensuite qu'en cliquant sur un bouton, les valeurs entrées soient stockées. J'ai essayé avec le code suivant, mais je ne sais pas trop comment indiquer le nom des TextBox:

Dim i, k As Integer

Dim TableauSommets(Form1.NbS.Text - 1) As String
For k = 0 To TableauSommets.Length - 1
For i = 1 To Form1.NbS.Text
TableauSommets(k) = Form1.Controls("TextBox" & i)
Next
Next

Dans le code, Form1.Controls("TextBox" & i) est souligné et le message d'erreur est "Une valeur de type 'System.Windows.Forms.Control' ne peut pas être convertie en 'String' et je ne sais pas comment faire.

Merci d'avance pour votre aide.

Julien

4 réponses

  1. Contributeur
    Bonjour,

    regarde ce lien sur les controles des userform
    https://silkyroad.developpez.com/VBA/ControlesUserForm/#LI-B
    1. Contributeur
      Re,
      NbS.Text me parait bizarre...
      voici ce que j(aurais codé

      1/en variable globale au dessus des codes de l'userform car je suppose que ce tableau va être utilisé ailleurs; si utilisation dans un module: passe en "Public tableausommets"et en 1° ligne du module avant les macros.
      Dim TableauSommets


      2/et pour le bouton de commande
      Private Sub CommandButton1_Click() 
      Dim Ctrl As Control, cptr As Byte 
      ReDim TableauSommets(0) As String 
      
      ' code d'après SilKyroad/ DVP 
      For Each Ctrl In Me.Controls 
          If TypeOf Ctrl Is MSForms.TextBox Then 
              ReDim Preserve TableauSommets(cptr) 
              TableauSommets(cptr) = Ctrl.Object.Value 
              cptr = cptr + 1 
          End If 
      Next Ctrl 
      
      End Sub 
      
  2. Contributeur
    Bonjour,
    Dans la création de tes TextBox ajouter...
    MonTextBox.Tag = NumeroTextBox 


    Et en VB.Net Voir ici
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    1. Bonjour,

      Ce lien renvoie vers des explications sur du VBA. Or, je programme en VB. J'ai essayé d'adapter à ma situation, mais cela ne fonctionne pas.
      1. Bonjour,

        Peut être comme ça, à condition que soit déclarée, en variable globale, MonTextBox As Object.

        Dim i, k As Integer
        Dim myText As Object
        Dim TableauSommets(Form1.NbS.Text - 1) As String
        
        For k = 0 To TableauSommets.Length - 1
           For i = 1 To Form1.NbS.Text 
              Set myText = Form1.Controls("MonTextBox" & i)
              TableauSommets(k) = myText.Text
              Set myText = Nothing
           Next
        Next 


        ;o)