Modifier la valeur d'une TextBox dynamique par le code
Bonjour à tous,
j'ai beau chercher dans tous les forums et dans toutes les langues, je ne trouve pas de réponse à ma question.
Contexte: j'ai un UserForm vide dans lequel je fais apparaître des TextBox de manière dynamique à l'initialisation (car leur nombre peut varier en fonction des données remplies sur ma feuille Excel. Les textbox apparaissent avec une valeur préremplie (pourcentage) en fonction des valeurs entrées sur la feuille Excel, et la somme de ces valeurs est égale à 100%. L'utilisateur peut modifier le contenu de ces textbox en insérant une autre quantité.
Problème: je souhaite que la somme des valeurs de ces textbox soit toujours égale à 100%. Si on prend le cas le plus simple: j'ai deux textbox dont la valeur est de 0,5 pour chacune (total = 100%). Donc je souhaite qu'en diminuant la valeur de la textbox 1, la valeur de la textbox 2 augmente d'autant, de manière à conserver un total de 100%.
Merci de votre aide, car je bloque totalement sur ce problème!
Bonjour
Pour la personne qui t'aidera
Voici le code utilisé pour vous aider à mieux comprendre. Bien sur je me limite ici à 2 textbox (i = 2 to 3) pour simplifier l'exemple, mais dans la pratique je pourrais avoir besoin de plus, selon le contenu de ma page excel. Quelqu'un a-t-il un idée de comment faire?
Dans le UserForm:
Option Explicit
Public Collect As Collection
Public CollectTxTB As Collection
Private Sub UserForm_Initialize()
'définition des variables
Set Collect = New Collection
Set CollectTxTB = New Collection
Dim Champs_numérique As MSForms.TextBox,
Dim ClTxTb As ClassUserForm1,
Dim i, top_position As Integer
top_position = 15
'ajout de la série de textbox
For i = 2 To 3
Set Champs_numérique = Me.Controls.Add("Forms.textbox.1", "TB" & i, True)
CollectTxTB.Add Champs_numérique, "" & i & ""
Set ClTxTb = New ClassUserForm1 'Ajouter à la collection de classe
Set ClTxTb.EquilibrageEvent = Champs_numérique
Collect.Add ClTxTb
With CollectTxTB("" & i & "")
.Top = top_position
.Left = 110
.Width = 45
.Tag = i
.Text = Sheets(1).Cells(i, 2).Value
End With
top_position = top_position + 22
Next i
End SubDans le module de classe voici ce que j'aimerais avoir:
Option Explicit
Public WithEvents EquilibrageEvent As MSForms.TextBox
Private Sub EquilibrageEvent_Change()
'Ici je souhaite un code qui, si l'une des deux textbox créée dynamiquement
'change l'autre change également de manière à ce que la somme des deux textbox
'soit toujours égale à 100%.
End Sub