Probleme d'instance de module de classe

Résolu
canichon Messages postés 50 Date d'inscription vendredi 7 juillet 2006 Statut Membre Dernière intervention 2 septembre 2009 - 19 déc. 2007 à 13:08
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 - 19 déc. 2007 à 14:07
Bonjour à tous,

Je cré des textboxes en dynamique dans un formulaire par groupe de 4 dont l'une est la somme des 3 autres.

Mon but est de re-calculer le total si je change la valeur à l'affichage de mon formulaire.

Je "gère" ça via un module de classe dont le code suit :
Option Explicit
Public MesTextBox As Collection
Public MesTextBoxTOTO As Collection
Public WithEvents totalTB As msforms.TextBox

Private Sub Class_Initialize()
    Set MesTextBox = New Collection
    Set MesTextBoxTOTO = New Collection
End Sub

Private Sub totalTB_change()
    MsgBox "On est entré"
End Sub

dans le code de mon formulaire, j'initialise comme suit :

Option Explicit
Dim MaClasse As Mon_mod_classe
Dim MesClasses As Collection

Private Sub userform_initialize()

    Dim i As Integer
    Dim val1 As Long, val2 As Long, val3 As Long
    Dim Nat1 As msforms.TextBox
    Dim Nat2 As msforms.TextBox
    Dim Nat3 As msforms.TextBox
    Dim totalNat As msforms.TextBox
   
    Set MesClasses = New Collection
    Set MaClasse = New Mon_mod_classe
    MesClasses.Add MaClasse
   
    Set Nat1 = mon_formulaire.Controls.Add("forms.textbox.1")    Nat1.Top 40...    Nat1.Left 10...     Nat1.Value = "25"
   
    Set Nat2 = mon_formulaire.Controls.Add("forms.textbox.1")    Nat2.Top 40...     Nat2.Left 110...    Nat2.Value = "25"
   
    Set Nat3 = mon_formulaire.Controls.Add("forms.textbox.1")    Nat3.Top 40...     Nat3.Left 210...     Nat3.Value = "25"
        val1 CInt(Nat1.Value)...     val2 CInt(Nat2.Value)....     val3 = CInt(Nat3.Value)
   
    Set totalNat = mon_formulaire.Controls.Add("forms.textbox.1")    totalNat.Top 20...     totalNat.Left 10...     totalNat.Value = val1 + val2 + val3
   
    MaClasse.MesTextBox.Add Nat1
    MaClasse.MesTextBox.Add Nat2
    MaClasse.MesTextBox.Add Nat3
    Set MaClasse.totalTB = Nat1
    Set MaClasse.totalTB = Nat2
    Set MaClasse.totalTB = Nat3
  
    Set MaClasse.totalTB = totalNat
   
End Sub

Mon probleme est que sur les 4 dernieres lignes, ( les "SET" ), il n'y a que la derniere qui est prise en compte... la derniere instance est la bonne !!!
COMMENT CA SE FAIT ???

Mon second probleme est de créer le code de la procedure totalTB_change() dans le module de classe pour permettre le re-calcule en "temps réel" des totaux...

Merci pour votre aide...

1 réponse

Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
19 déc. 2007 à 14:07
Tu affectes 4 objets différents à une même variable objet, donc forcément, au final, ta vriable objet pointe sur le dernier que tu lui a affecté !
Je ne vois rien d'anormal à ce comportement ?
C'est exactmeetn comme si tu écrivais ...
Dim i As Long
i = 1
i = 2
i = 3
i = 4

... et si tu t'étonnais que la valeur de i soit 4 après ce bout de code !!
3
Rejoignez-nous