Alimenter une textbox crée dynamiquement

BobOdeville -  
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   - 8 août 2021 à 15:02
Bonjour,

J'ai créer ( c'est un grand mot) une macro qui permet d'ajouter dynamiquement des textbox dans une multipage selon une variable.
Dont voici le code de programmation :

Dim collect As Collection
Dim Obj1 As Object
Dim NbArticle As Integer
Dim i As Integer

Sheets("PARAMETRE").Range("B32").Value = ComboBox59.Value
NbArticle = Sheets("PARAMETRE").Range("B33").Value

Set collect = New Collection

For i = 1 To NbArticle

Set Obj1 = Me.MultiPage1.Pages(1).Controls.Add("forms.textbox.1")
With Obj1
.Name = "Désignation" & i 'nom de ta textbox (toto1, toto2, toto3, ...)
.Left = 15 'position par rapport au rebord gauche de l'UserForm
.Top = 20 * i + 65 'position par rapport au haut de l'UserForm
.Width = 160 'largeur de la zone d'écriture
.Height = 15 'hauteur de la zone d'écriture

End With

End sub

Ca marche très bien. Ainsi lorsque je sélectionne la variable ( Nom d'un fournisseur) dans la Combobox59, il apparait le nombre de textbox relative au x nombre d'articles référencés pour ce fournisseur.

Là ou je sèche c'est comment attribuer une valeur dans chaque textbox automatiquement.
Ainsi le fournisseur "Bob" propose des tomate, des courgettes, des poires et des pommes, et bien je souhaite que dans la textbox1 apparaisse : "Tomate", dans la textebox2 : "Courgettes" etc

Merci par avance pour vos éclairages
A voir également:

2 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
0
bobodevil
 
Bonjour Le Pivert.

Merci pour votre réponse.
Alors j'ai fais ceci à la suite de la macro précédente :
_____________________________________________________________
Sheets("MERCURIALE").Activate

For j = 1 To Range("B" & Rows.Count).End(xlUp).Row

If Cells(j, 2) = ComboBox59.Value Then
Me.Controls("Désignation" & i) = Cells(j, 3)
End If
Next j
_______________________________________________________________
Les textbox apparaissent mais elle sont alimentées avec la même et dernière référence de ma plage de données

Seriez-vous me dire ce qui cloche?
Bien à vous
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > bobodevil
 
quel évènement déclenche la macro de création de textBox dynamique?
0
bobodevil > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
Le changement de la valeur de la combobox59

Private Sub ComboBox59_Change()

Cette sub là fonctionne bien mes textbox apparaissent selon le nombre d'article référence dans ma plage de données.

Ce qui ne fonctionne pas est que j'ai le même article qui apparait dans toutes les textbox alors qu'il devrait être différent.
0
bobodevil
 
Le changement de la valeur de la combobox59

Private Sub ComboBox59_Change()

Cette sub là fonctionne bien mes textbox apparaissent selon le nombre d'article référence dans ma plage de données.

Ce qui ne fonctionne pas est que j'ai le même article qui apparait dans toutes les textbox alors qu'il devrait être différent.
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Il faut supprimer les TextBox avant d'en créer d'autres!


Private Sub ComboBox59_Change()
Dim collect As Collection
Dim Obj1 As Object
Dim NbArticle As Integer
Dim i As Integer

Sheets("PARAMETRE").Range("B32").Value = ComboBox59.Value
NbArticle = Sheets("PARAMETRE").Range("B33").Value

Set collect = New Collection

supprimer

For i = 1 To NbArticle

Set Obj1 = Me.MultiPage1.Pages(1).Controls.Add("forms.textbox.1")
With Obj1
.Name = "Désignation" & i 'nom de ta textbox (toto1, toto2, toto3, ...)
.Left = 15 'position par rapport au rebord gauche de l'UserForm
.Top = 20 * i + 65 'position par rapport au haut de l'UserForm
.Width = 160 'largeur de la zone d'écriture
.Height = 15 'hauteur de la zone d'écriture
End With
 Me.Controls("Désignation" & i) = Cells(i, 1) 'adapter code
  Next
End sub

Sub supprimer()
Dim Ctrl As Control

For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is MSForms.TextBox Then
UserForm1.MultiPage1.Pages(1).Controls.Remove Ctrl.Name 'adapter nom userform
End If
Next Ctrl
End Sub


Voilà a adapter
0
bobodevil > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci le Pivert. pour votre réponse.
Juste que ça bug sur supprimer
UserForm2.MultiPage1.Pages(1).Controls.Remove Ctrl.Name 'adapter nom userform

C'est bien le bon UserForm, la bonne MultiPage et la bonne Pages
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > bobodevil
 
Cela fonctionne chez moi.

voir cet exemple:

https://www.cjoint.com/c/KHina2sUZ71

@+ Le Pivert
0