VBA : Récupération de données dans userform dynamique (textbox)

Résolu
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,

Je souhaite réaliser un programme VBA où l'on peut rentrer une liste de personnes. Le nombre peut varier, d'où l'utilisation d'un userform dynamique. Pour mon exemple j'en ai choisi 7.
Mon problème est que quand je lance le programme un message d'erreur s'affiche :"Erreur de compilation. Membre de méthodes ou de données introuvable." tout en me surlignant le "Txtbx" de la fin. Je suis débutant sur VBA et ne vois pas où est mon erreur.
Merci d'avance et bonnes fêtes de fin d'année !

Voici mon programme :


Private Sub UserForm_Initialize()

Dim Obj As Control
Dim Cl As Classe1
Dim i As Byte
Set Collect = New Collection
'
For i = 1 To 7 'Boucle pour la création des 7 TextBox
Set Obj = Me.Controls.Add("forms.Textbox.1")
With Obj
.Name = "TextBox" & i
'.Object.Text = .Name 'Pour contrôler le nom des TextBox créés
.Left = 5
.Top = 30 * i + 10
.Width = 50
.Height = 15
.BackColor = &HC0FFFF
.BorderStyle = 1
.FontName = "arial"
.FontBold = True
.Size = 9
.Enabled = True 'Ecriture
End With

'Ajout de l'objet dans la classe
Set Cl = New Classe1
Set Cl.TxtBx = Obj

Collect.Add Cl
Next i
'
End Sub

6 réponses

Yoda
 
Bon voilà la suite,

Une fois créés tes TexBox dynamiques,

Admettons que tu veuilles transférer le contenu des TextBox quand tu appuies sur un bouton CommandButton1

Private Sub CommandButton1_Click()

Dim Ctrl As Control, CtrlName As String, CtrlIndex As Integer

    For Each Ctrl In Me.Controls
           CtrlName = Ctrl.Name
           If InStr(CtrlName, "TextBox") = 1 Then
              'recuperation du numero du Textbox
              CtrlIndex = Val(Mid(CtrlName, 8))
              'MsgBox CtrlIndex
              Worksheets("Feuil1").Cells(1, CtrlIndex).Value = Ctrl.Text
            End If
        Next

End Sub

A+.
2
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour ton aide ! Cela fonctionne parfaitement !
0
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir Yoda. J'ai utilisé cette partie de programme qui fonctionne très bien. Maintenant je voudrais la compléter afin qu'un message d'erreur apparaisse si jamais une ou plusieurs textbox n'a (ont) pas été complétée(s). Saurais tu comment faire ? Merci
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonsoir anton26,

Pour les essais, pourriez-vous déposer votre fichier Excel sur un site de stockage tel que "cjoint.com" en prenant la précaution d'effacer ou de remplacer toutes données confidentielles.
1
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Voici le lien pour accéder a mon fichier : https://www.cjoint.com/?BLwuxdIb3fa
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
Voir cette démo et plus particulièrement la démo2
Dans cette démo ce n'est pas le nom qui à de l'importance, si tu veux savoir ce que le textBox contient tu n'est pas plus avancé avec une collection de classe, il te faut en plus une collection d'objets.
La démo en question te montrera comment faire.
A+
1
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai bien étudié cette démo mais je ne vois pas comment l'appliquer à mon problème. Pourrais tu m'éclairer sur la manière dont je pourrais m'y prendre ? Merci beaucoup
0
Yoda
 
Bonsoir,

La propiété .Size n'existe pas pour TextBox, il faut mettre .FontSize
De même, le type Classe1 n'est pas défini.

Voici ton code revu et corrigé qui fonctionne

Private Sub UserForm_Initialize()
Dim Obj As Control
'Dim Cl As Classe1
Dim i As Byte
'Set Collect = New Collection
'
For i = 1 To 7 'Boucle pour la création des 7 TextBox
Set Obj = Me.Controls.Add("forms.Textbox.1")
With Obj
.Name = "TextBox" & i
'.Object.Text = .Name 'Pour contrôler le nom des TextBox créés
.Left = 5
.Top = 30 * i + 10
.Width = 50
.Height = 15
.BackColor = &HC0FFFF
.BorderStyle = 1
.FontName = "arial"
.FontBold = True
.FontSize = 9
.Enabled = True 'Ecriture
End With
'Ajout de l'objet dans la classe
'Set Cl = New Classe1
'Set Cl.TxtBx = Obj
'Collect.Add Cl
Next i
'
End Sub


A+.
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anton26 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Merci a tous les trois d'utiliser de votre temps pour me renseigner.

En effet Yoda mon programme fonctionne, mais je souhaiterai maintenant récupérer les noms rentrés dans les textbox afin de les ranger dans une feuille.
J'ai essayé avec : Worksheets("Feuil1").Cells(1,i).Value = textboxi
mais cela ne fonctionne pas.
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
C'est comme j'explique dans mon poste précédant.
Regarde la démo.
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonsoir anton26,

Je ne puis faire fonctionner ta macro .. tu as dû supprimer trop de choses .. soit.

Tes Userforms sont dynamiques .. ok

Quand tu tentes de récupérer les valeurs des UserForms:
- est-ce que les Userforms sont encore "en vie" ?
- tu récupère à partir d'un autre UserForm ?
0