A l'aide, TextBox_Change() inefficace dans un userform dynamique [Résolu]

Signaler
Messages postés
8
Date d'inscription
mardi 19 octobre 2010
Statut
Membre
Dernière intervention
25 mars 2011
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

Dans un userform dynamique, je crée des TextBox et des Label (par code)
je souhaite rendre dépendant mon Label à mon TextBox
pour cela j'ai fais un InsertLines qui me crée Private Sub TextBox_Change()

Lorsque je lance ma macro tous va pour le mieux (tout où il faut comme il faut)
même Private Sub TextBox_Change() est écrit
Mais quand je modifie mon TextBox le Label ne change pas

il y a t il un ReLoad.userform ou un truck du genre qu'il faudrait mettre ?

Merci d'avance

ci-dessous mon code:

Private Sub UserForm_Activate()
Dim i As Long
Dim j As Long

Me.Label1.Caption = N°assemblage

PosLigne = 55
For i = 0 To UBound(RécapTabl)
    If Not (RécapTabl(i, 0)(0, 0)) = "" Then  'RécapTabl est un tableau public regroupant plusieurs tableaux public 
                                              'la position RécapTabl(i, 0) donne le nom de ses tableaux   
        Call Ajout_Titre((RécapTabl(i, 1)))
        For j = 0 To UBound(RécapTabl(i, 0))
            Call Ajout_QtéLg((RécapTabl(i, 0)(j, 1)), i, j)
            Call Ajout_Volum((RécapTabl(i, 0)(j, 1)), (RécapTabl(i, 0)(j, 3)), (RécapTabl(i, 0)(j, 4)), i, j)
        PosLigne = PosLigne + 18
        Next j
    End If
Next i

Call Ajout_Code 'de fonctionne pas

End Sub
_______________________________________________
Public Function Ajout_Code()
Dim i As Long
Dim j As Long
Dim Code As String
Dim Txt As String
Dim Lbl As String
Dim k   As Integer
Dim LgDépliée As Double

For i = 0 To UBound(RécapTabl)
        For j = 0 To UBound(RécapTabl(i, 0))
            Txt = "Lg" & i & "Txt" & j
            Lbl = "Vol" & i & "Lbl" & j
            LgDépliée = (RécapTabl(i, 0)(j, 4))
            If LgDépliée 0 Then LgDépliée 1
            k (RécapTabl(i, 0)(j, 1)) * (RécapTabl(i, 0)(j, 1)) * (RécapTabl(i, 0)(j, 3)) * LgDépliée 'k Old Lg * Old volume
                    
            Code = "Private Sub " & Txt & "_Change()" & vbCrLf
            Code Code & "UserForm1." & Lbl & ".Caption " & k & " / (UserForm1." & Txt & ".Value)" & vbCrLf 'New Vol = k / New Lg
            Code = Code & "End Sub" & vbCrLf
            Application.VBE.CodePanes(1).CodeModule.InsertLines 1, Code
        Next j
Next i

End Function
_______________________________________________

Public Function Ajout_Designation(Design As String)

Dim Titre As MSForms.Label
Set Titre = Me.Controls.Add("Forms.Label.1", , True)

Titre.Width = 225
Titre.Height = 11
Titre.Left = 10
Titre.Top = PosLigne
Titre.Caption = Design
Titre.Visible = True
Titre.Font.Size = 8

End Function
_______________________________________________

Public Function Ajout_QtéLg(QtéLg As Double, Préfix As Long, Suffix As Long)

Dim Titre As MSForms.TextBox
Dim Code As String
Set Titre = Me.Controls.Add("Forms.TextBox.1", , True)

Titre.Width = 45
Titre.Height = 15
Titre.Left = 240
Titre.Top = PosLigne
Titre.Value = QtéLg
Titre.Visible = True
Titre.Font.Size = 8
Titre.Name = "Lg" & Préfix & "Txt" & Suffix

'penser à la toupie
End Function

2 réponses

Messages postés
8
Date d'inscription
mardi 19 octobre 2010
Statut
Membre
Dernière intervention
25 mars 2011

Dsl Ajout_Designation(Design As String) n'a rien a faire ici pour comprendre le probleme

par contre il manque ça:
Public Function Ajout_Volum(QtéLg As Double, Section As Double, LgDépliée As Double, Préfix As Long, Suffix As Long)
Dim Titre As MSForms.Label
Dim Vol As Double

If LgDépliée 0 Then LgDépliée 1
Vol = QtéLg * Section * LgDépliée

Set Titre = Me.Controls.Add("Forms.Label.1", , True)

Titre.Width = 50
Titre.Height = 11
Titre.Left = 290
Titre.Top = PosLigne
Titre.Caption = Vol
Titre.Visible = True
Titre.Font.Size = 8
Titre.Name = "Vol" & Préfix & "Lbl" & Suffix

End Function
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
Private WithEvents MonTextBox As MSForms.TextBox

Private Sub MonTextBox_Change()
    TextBox1.Text = MonTextBox.Text
End Sub

Private Sub UserForm_Activate()
    Set MonTextBox = Controls.Add("Forms.TextBox.1", , True)
End Sub


Quand je modifie le contenu de mon TextBox dynamique, mon evenement Change est bien déclenché (merci WithEvents)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp