canichon
Messages postés50Date d'inscriptionvendredi 7 juillet 2006StatutMembreDernière intervention 2 septembre 2009
-
19 déc. 2007 à 13:08
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 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
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...
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 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 !!