Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Récupération des valeurs dans userform dynamique

Merwan

XLDnaute Nouveau
Bonjour,
Je suis nouvellement inscrit sur le forum et je vous remercie de m'y accueillir.
Je ne suis pas un grand connaisseur d'Excel, mais, je suis amené à concevoir un outil .
Il s'agit d'un Userform qui vas demander à l'utilisateur un nombre n.
En fonction du nombre, il vas créer automatiquement n TextBox en cliquant sur un Commandbutton.
Le but est donc de récupérer les infomations inscrite dans les différents TextBox.

Pour pouvoir réaliser cette opération voici mon code au Click du commandbutton :

VB:
Private Sub CommandButton3_Click()
Dim nbCMD As Integer, increment As Integer, valTOP As Integer, changeTOP As Integer
nbCMD = nbrCMD.Value
increment = 1
valTOP = 85
changeTOP = 0

While increment <= nbCMD

Dim Obj As Control
    
    Set Obj = Me.Controls.Add("forms.Textbox.1")
     With Obj
        .Name = "TxtBox" & increment
        .Top = valTOP + changeTOP
        .Left = 6
        .Width = 132
        .Height = 18
     End With
 
 increment = increment + 1
 changeTOP = changeTOP + 18

Wend

End Sub

Donc maintenant le but est de récupérer, également à partir d'un Click d'un CommandButton, les infos des TextBox.
J'ai essayé de m'instruire sur quelques tutos et j'ai sortit ça ( je tiens à préciser que ce n'est pas définitif et il peut être complétement refait si une autre méthode existe ) :

VB:
Private Sub Subbutton_Click()

 Dim i As Integer
 Dim TxtBox() As Variant
For i = 1 To increment
TxtBox(i) = Me.Controls.Item("TxtBox" & increment)

Next i

MsgBox "Le contenu du textbox est : " &

End Sub

Egalement je ne sais pas afficher les valeurs avec ce type de variable.

Alors voilà vous connaissez mon problème, si vous êtes apte à m'aider, je prends volontier.
Merci pour votre temps
 

Best1

XLDnaute Nouveau
Bonjour,

Éventuellement :

Private Sub Subbutton_Click()
Dim i As Byte
For i = 1 To increment - 1
MsgBox "Le contenu du textbox" & i & " est : " & Me.Controls("TxtBox" & i).Value
Next i
End Sub


increment doit être une variable déclarée en haut de la form pour être reconnue.
 

Merwan

XLDnaute Nouveau
Bonjour,

Merci pour la rapidité.
Le code fournit marche très bien, le problème est que je n'ai toujours pas affecté le resultat de Me.Controls("TxtBox" & i).Value à une variable.
Exemple, si 4 est le nombre de textbox j'aimerais avoir 4 variable créer.
Ou alors je me trompe et uniquement Me.Controls("TxtBox" & i).Value peut nous servir.

Merci de ton aide.
 

xUpsilon

XLDnaute Accro
Bonjour,

J'ai du mal à comprendre comment tu veux utiliser les données issues de tes textbox, mais évite de créer n variables, et utilise plutôt un tableau (array) à taille variable pour stocker tes valeurs, ça me semble plus adapté !

Bonne continuation
 

patricktoulon

XLDnaute Barbatruc
bonjour
je pige pas le contexte tu donne peu d'indication

mais en occurrence ici c'est une variable tableau qu'il te faut et en global module
j'ai aussi variabiliser l’écartement et le height des textboxs

VB:
Dim nbCMD As Integer, increment As Integer
Dim tabtbx()
Private Sub CommandButton3_Click()
    Dim valTOP&, changeTOP&, Htxb&, ecart&
    If nbrCMD.Value = "" Then MsgBox "donnez un nombre!!": Exit Sub
    nbCMD = nbrCMD.Value
    ReDim tabtbx(1 To nbCMD)
    increment = 1
    valTOP = 85
    changeTOP = 0
    ecart = 22
    Htbx = 18
    While increment <= nbCMD

        Dim Obj As Control

        Set Obj = Me.Controls.Add("forms.Textbox.1", "TxtBox" & increment)
        With Obj
            tabtbx(increment) = .Name
            .Top = valTOP + changeTOP
            .Left = 6
            .Width = 132
            .Height = 18
        End With
        increment = increment + 1

        changeTOP = changeTOP + ecart

    Wend

End Sub

Private Sub CommandButton4_Click()
    For i = 1 To nbCMD
        MsgBox tabtbx(i)
    Next
End Sub
 

Pièces jointes

  • textbox dynamiques.xlsm
    14.5 KB · Affichages: 33

Merwan

XLDnaute Nouveau
Bonjour,

Merci pour votre aide.
Cependant, avec votre méthode .Name je ne retourne que : "TxtBox1", "TxtBox2", etc...
Je ne retourne pas les valeurs contenu dans les textbox.

Le but est de récupérer ces valeurs pour faire une recherche dans un tableau.

Merci à vous.
 

Merwan

XLDnaute Nouveau
Désolé d'insister...
Mais .Text ne me retourne rien du tout.
Mon MsgBox est vide.

Le code permettant la création et la récupération des données dans les TextBox :

VB:
Private Sub CommandButton3_Click()
    Dim valTOP&, changeTOP&, Htxb&, ecart&
    If nbrCMD.Value = "" Then MsgBox "donnez un nombre!!": Exit Sub
    nbCMD = nbrCMD.Value
    ReDim tabtbx(1 To nbCMD)
    increment = 1
    valTOP = 85
    changeTOP = 0
    ecart = 22
    Htbx = 18
    While increment <= nbCMD

        Dim Obj As Control

        Set Obj = Me.Controls.Add("forms.Textbox.1", "TxtBox" & increment)
        With Obj
            tabtbx(increment) = .Text
            .Top = valTOP + changeTOP
            .Left = 6
            .Width = 132
            .Height = 18
        End With
        increment = increment + 1

        changeTOP = changeTOP + ecart

    Wend

End Sub

Le code qui affiche le contenu de mes valeurs inscrite dans les TextBox :

VB:
Private Sub CommandButton4_Click()
    For i = 1 To nbCMD
        MsgBox tabtbx(i)
    Next
End Sub

Je continue les recherches de mon côté !
 

xUpsilon

XLDnaute Accro
Re,

Le problème, c'est que tu affiches un tableau dont les valeurs n'ont pas été remplies : je m'explique.
Quand tu appuies sur ton CmdButton3, tu crées un certain nombre de textbox. Ensuite, tu remplis les textbox. Puis, pour les afficher, tu appuies sur le CmdButton4.
Sauf que tu as remplis tes Txtbox APRES les avoir créées, càd APRES l'exécution de ta macro de création de Textbox, qui te sert aussi de macro de remplissage de ton tableau suivant tes valeurs. Ainsi, vu comment tu as rangé tes bouts de code, pour enregistrer les valeurs de tes textbox dans ton tableau, il faudrait recliquer sur le CmdButton3. Sauf que tu vides tes Textbox quand tu exécutes cette macro.
Du coup ton tableau reste toujours vide, forcément

Est-ce que j'ai été suffisamment clair ?

Bonne continuation
 

Merwan

XLDnaute Nouveau
Bonjour,

Super j'ai testé tout ça et j'ai compris la mécanique.
Cependant, j'ai une question qui sort un peu du sujet mais comment puis-je récupérer cette information sous forme de variable ?

Je m'explique :
Le but de mon projet est de récupérer l'information inscrite dans les txtbox pour aller chercher une ligne dans un autre fichier excel.
La ligne ciblé est la ligne comportant le numéro inscrit dans les txtbox ( les infos récupérer sont uniquement des integer )

Merci bien
 

xUpsilon

XLDnaute Accro
Re,

Bien sûr que c'est possible, mais les lignes dans tes textbox s'en sont plusieurs ou tu entres un caractère par textbox et tu concatènes tout ou tu sommes toutes les valeurs des textbox ?
Donne moi plus d'indications, mais quoi qu'il en soit c'est bien entendu faisable de récupérer la valeur dans une variable.

Bonne continuation
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…