IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

module de classe et textbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut module de classe et textbox
    bonjour à tous,

    voilà, j'ai 3 textboxes avec chacune une valeur et un 4eme censé faire le total des 3 autres "à la volée".

    Le probleme est : CA MARCHE PAS !!!

    voici mon code :

    Mon module de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    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
    et le code de mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Option Explicit
    Dim MaClasse As Mon_mod_classe
    Dim MesClasses As Collection
     
    Private Sub userform_initialize()
     
        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")
        With Nat1
            .Top = 40
            .Left = 10
            .Value = "25"
        End With
        Set MaClasse.totalTB = Nat1
     
        Set Nat2 = mon_formulaire.Controls.Add("forms.textbox.1")
        With Nat2
            .Top = 40
            .Left = 110
            .Value = "50"
        End With
        'Set MaClasse.totalTB = Nat2
     
        Set Nat3 = mon_formulaire.Controls.Add("forms.textbox.1")
        With Nat3
            .Top = 40
            .Left = 210
            .Value = "25"
        End With
        'Set MaClasse.totalTB = Nat3
     
        val1 = CInt(Nat1.Value)
        val2 = CInt(Nat2.Value)
        val3 = CInt(Nat3.Value)
     
        Set totalNat = mon_formulaire.Controls.Add("forms.textbox.1")
        With totalNat
            .Top = 20
            .Left = 10
            .Value = val1 + val2 + val3
        End With
        Set MaClasse.MesTextBoxTOTO = totalNat
     
        'Set MaClasse.totalTB = totalNat
     
    End Sub
    vous remarquerez la mise en commentaire de certaines lignes car sans ça, ça marche pas : 1 "instance" dans la classe MaClasse.totalTB et ça marche, a la seconde instance créée, ça merdouille...

    Ensuite, il me faudrait de l'aide pour ecrire le code dans totalTB_change() parce que je ne sais pas du tout comment faire... Je voudrais que, quand l'un des 3 textboxes change de valeur, le texbox total re-calcule ce total...

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Actuellement ton code d'addition est dans l'evenement initialize. Ce qui signifie qu'il calcul a l'initialisation de ton Userform
    Pour que a textbox4 soit mise a jour en dynamique a chaque saisie dans une des textbox il faut utiliser l'évenement Change de ces Textbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Private Sub TextBox1_Change()
        Calcul
    End Sub
    Private Sub TextBox2_Change()
    Calcul
    End Sub
     
    Private Sub TextBox3_Change()
    Calcul
    End Sub
     
    Sub Calcul()
     
    TextBox4.Text = Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text)
     
    End Sub

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    salut jfontaine,

    ta solution est OK mais mon probleme est plus complexe que ça...

    En fait, mes textbox sont générés en dynamique et je ne connais pas leur nombre
    Je ne peux donc pas géré ça en créant des textbox_change ne connaissant le nombre de procédures a créer...

    Il faut que je puisse gérer ce calcul ( somme des textbox ) dans mon module de classe...

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Dans ce cas, je ferais une boucle sur les controls de la feuille et si Textbox, alors j'ajoute a ma variable.
    Pour eviter d'additionner la texbox de résultat, a la fin tu soustrait la valeur du dernier textbox

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    comme il existe userform_initialize, ne serait-il pas possible d'avoir userform_change ( ce qui ne marche pas : DEJA TESTE ) et si mon userform change, je peux faire un test sur mes objets et si objet = userform alors je re-calcule...

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Un exemple avec deux modules de classes, il faudra sans doute prevoir un controle sur la saisie.

    N'hesite pas a executer le code en pas a pas ca aide a comprendre le mécanisme.

    En cas de besoin, tu sais quoi faire.

    Cordialement,

    Tirex28/
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Module de Classe pour controle textbox
    Par RastaBomboclat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2015, 18h10
  2. [XL-2010] TextBox et Modules de classe pour Excel 2010 et 2013
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2014, 18h36
  3. [XL-2010] Total dans une textbox dans un module de classe
    Par crissud dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/12/2013, 13h17
  4. [XL-2007] Module de classe pour TextBox
    Par apt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/01/2012, 22h15
  5. créer un module de classe pour gérer un textbox
    Par Cybernard dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/06/2010, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo