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 :

Question sur la gestion d'évènement de contrôle dynamque [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut Question sur la gestion d'évènement de contrôle dynamque
    Bonjour,

    Je vais relancer ma question comme je n'ai pas eu de réponse la première fois, alors voila dans mon projet, j'ai créé des contrôles de manière dynamique. Néanmoins, je n'arrive pas à gérer les évènements de ces contrôles.
    Par exemple, je voudrais que lorsque ma checkbox dynamique est cliqué, je voudrais que ma textbox apparaisse.

    J'ai lu le cours de silkyroad sur la gestion d'évènement : https://silkyroad.developpez.com/VBA...icEditor/#LV-A
    Code sur silkyroad
    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
     
     
    Option Explicit
     
    Private Sub CommandButton1_Click()
    Dim Obj As Control
    Dim Cl As Classe1
    Dim i As Integer
     
    Set Collect = New Collection
     
    For i = 1 To 3 'boucle pour la création des CheckBox
        Set Obj = Me.Controls.Add("forms.Checkbox.1")
        With Obj
            .Name = "moncheckbox" & i
            .Object.Caption = "le texte" & i
            .Left = 140
            .Top = 30 * i + 10
            .Width = 50
            .Height = 20
        End With
     
        'ajout de l'objet dans la classe
        Set Cl = New Classe1
        Set Cl.ChkBx = Obj 'A quoi correspond l'objet Cl.Chkbox?
        Collect.Add Cl 'Je ne comprends toujours pas pourquoi faut il placer les contrôles dynamiques dans une collection.
    Next i
     
    End Sub

    Si quelqu'un pouvait vraiment m'aider sur ce problème qui commence à perdurer...

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    ET ou est le code de ta "classe1" ?????????????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    ah oui pardon!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Option Explicit
     
    Public WithEvents ChkBx As MSForms.CheckBox
     
    'Exemple pour gérer l'évènement clic sur les objets type CheckBox
    Private Sub ChkBx_Click()
        'cet exemple affiche le nom et la valeur de l'objet cliqué
        MsgBox ChkBx.Name & ": " & ChkBx.Value
    End Sub
    '--------------------------------------
    C'est le code que l'on trouve sur silkyroad pour créer des contrôles dynamiquement en faite
    Je ne comprends pas aussi à quel moment la routine du bouton click appelle l'évènement dans le module classe :"(

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    deja d'une part pour faire un "set collect = new collection" faut il encore que collection soit reconnu
    et pour cela il faut la declarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim collect As Collection
        Set collect = New Collection
    ensuite pour etre honete moi aussi j'ai testé de nombreuse fois ce tutoriel a la lettre pres !!!et ca n'a jamais fonctionner malgré que ca devrait

    plutot que de collectionner les classes je les instancie directement ce qui en terme de nombre d'instances de classe revient au meme
    je te fait un exemple facon patrick
    mais d'abors j'ai cru comprendre que tu voulais faire apparaitre un textbox associer a chaque checkbox :tu confirme?????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Oui c'est cela, je te mets mon code pour la création des mes contrôles:
    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
    Dim i As Integer
     
        Set tube = MultiPage1.Pages(2)
     
        For i = 0 To 11
            With tube
                Set Vtube = .Controls.Add("forms.Checkbox.1")
                Set Ttube = .Controls.Add("forms.Textbox.1")
            End With
     
            With Vtube
                .Name = "Vtube" & i
                .Left = 90
                .Height = 18
                .Top = 30 + i * 29
                .Width = 24
                .Caption = ""
                .Value = False
            End With
     
            With Ttube
                .Name = "Ttube" & i
                .Left = 156
                .Top = 30 + i * 29
                .Height = 18
                .Width = 40
                .TextAlign = 2
                .Visible = False
            End With
        Next
    Les variables Vtube et ttube sont déclarées en têtes de modules pour pouvoir être réutiliser par les sous-routines.

    Et voici ce que j'ai pensé faire pour gérer les évènements de mes contrôles checkbox et textbox dynamiques (toujours dans le module de mon userform).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
    Dim tube As Object
     
        Set tube = MultiPage1.Pages(2)
        For i = 0 To 11
            If tube.Controls("Vtube" & i).Value = True Then
                tube.Controls("Ttube" & i).Visible = True
            Else
                tube.Controls("Ttube" & i).Visible = False
            End If
        Next
    Mais hé hé, j'avais zappé que mes checkbox n'avaient pas d'évènements click ou change

    ça fait des semaines que je lis des tutos et cours sur les modules de classes et leur gestion d'évènement et je ne te caches pas que je nage encore sur ce sujet. Du coup j'ai réussi à contourner plusieurs fois mes problèmes pour éviter de les utiliser mais sur ce coup la je crois que je n'ai plus trop le choix x)

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    ensuite pour etre honete moi aussi j'ai testé de nombreuse fois ce tutoriel a la lettre pres !!!et ca n'a jamais fonctionner malgré que ca devrait
    Contre exemple

    Module de classe Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public WithEvents ChkBx As MSForms.CheckBox
     
    Private Sub ChkBx_Click()
    Dim Tmp As String
     
    Tmp = Replace(ChkBx.Name, "Vt", "Tt")
     
    UserForm1.Controls(Tmp).Visible = ChkBx.Value
    End Sub
    Module de l'userform Userform1
    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
    Option Explicit
     
    Dim ColC As Collection
     
    Private Sub UserForm_Initialize()
    Dim vTube As msforms.CheckBox
    Dim tTube As msforms.TextBox
    Dim Tube As msforms.Page
    Dim Clas As New Classe1
    Dim i As Integer
     
    Set ColC = New Collection
    Set Tube = Me.MultiPage1.Pages(2)
     
    For i = 0 To 11
        With Tube
            Set vTube = .Controls.Add("forms.Checkbox.1")
     
            With vTube
                .Name = "Vtube" & i
                .Left = 90
                .Height = 18
                .Top = 30 + i * 29
                .Width = 24
                .Caption = ""
                .Value = False
     
            End With
            Set Clas = New Classe1
            Set Clas.ChkBx = vTube
            ColC.Add Clas
     
            Set vTube = Nothing
            Set tTube = .Controls.Add("forms.Textbox.1")
            With tTube
                .Name = "Ttube" & i
                .Left = 156
                .Top = 30 + i * 29
                .Height = 18
                .Width = 40
                .TextAlign = 2
                .Visible = False
            End With
            Set tTube = Nothing
     
        End With
    Next i
    Set Tube = Nothing
    End Sub

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je n'ai pas besoins de ton code
    voici un exemple tres simple j'ai commenté autant que possible afin de t'en faire comprendre le fonctionnement

    pour etre tranquille tu va faire ca dans un fichier vierge
    dans ce fichier tu vas ajouter un userform et un module classe qui se nomme "Classe1"
    dans l'userform en haut a droite tu va ajouter ton bouton
    voila on a la structure
    maintenant les codes

    dans le code du userform tu va mettre simplement ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cl As New Classe1
    Private Sub CommandButton1_Click()
    cl.initiate Me
    End Sub
    jusque la rien de bien compliqué

    maintenant dans le module classe tu va mettre ce code
    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
    Option Explicit
    Public WithEvents ChkBx As MSForms.CheckBox
    Public WithEvents TxTB As MSForms.TextBox
    Dim cls() As New Classe1
    Function initiate(uf)
        Dim i&, chx As Object, txt As Object
        For i = 1 To 3    'boucle pour la création des CheckBox
            ReDim Preserve cls(1 To i)
            Set chx = uf.Controls.Add("forms.Checkbox.1")    'on ajoute dynamiquement le checkbox
            Set txt = uf.Controls.Add("forms.TextBox.1")    ' on ajoute dynamiquement le textbox qui va etre associé a ce checkbox
            'on les place et dimentionne
            With chx: .Name = "moncheckbox" & i: .Object.Caption = "le texte" & i: .Left = 140: .Top = 30 * i + 10: .Width = 50: .Height = 20: End With
            With txt: .Name = "montextbox" & i: .Object.Value = "le texte" & i: .Left = 40: .Top = 30 * i + 10: .Width = 80: .Height = 20: .Visible = False: End With
            'ajout de l'objet dans la classe
            Set cls(i).ChkBx = chx: Set cls(i).TxTB = txt    'en les mettant dans la meme classe il seront associés(voir explication dans l'evenement)
        Next i
    End Function
    'Exemple pour gérer l'évènement clic sur les objets type CheckBox
    Private Sub ChkBx_Click()
    'cet exemple affiche le nom et la valeur de l'objet cliqué
        If ChkBx = True Then TxTB.Visible = True Else TxTB.Visible = False ' si le checkbox est true le textbox est visible sinon invisible
       'comment il sont associé chacun par paire(checkbox/textbox)???????
    'et bien c'est tout simple
    'en mettant le txt et le chx dans la meme instance de la classe  dans la boucle dans initiate
    'dans l'evenement TxTB c'est le textbox qui a été placé dans la meme instance
    'autrement dit l' instance(1) de la classe1  il y a moncheckbox1 avec montextbox1
    'dans l' instance(2) de la classe1  il y a moncheckbox2 avec montextbox2
    'etc.....
    'autrement dit aussi si tu clique sur monchexbox1 TxTB sera monTextbox1 car ce textbox est seul avec moncheckbox1 dans l'instance de la classe
    ' ca veux dire  par exemple que quand tu clique sur "moncheckbox2 tu declanche l'evenement de l'instance(2) de la classe1
    End Sub
    '--------------------------------------
    comme tu peut le voir il y a beaucoup de commentaires je ne peux etre plus clair et il n'y a rien de plus simple a comprendre
    surtout quand tu va lire les commentaires dans l'evenement de ChkBx

    demonstration
    Nom : demo.gif
Affichages : 239
Taille : 192,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour mercatog

    perso pour les association de controls dynamique je n'utilise pas me.controls(temp....)

    ils s'associe d'eux memes puisqu'ils sont par paire dans chaque instance
    donc dans l'evenement du check par exemple dans mon model il reconnait quel textbox est TxTB
    conclusion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ChkBx = True Then TxTB.Visible = True Else TxTB.Visible = False ' si le checkbox est true le textbox est visible sinon invisible
    fonctionne pour tout les checkbox et textbox ajouté dynamiquement
    chaque checkbox a son compagnon textbox bien determiné
    plus simple que ca je vois pas
    ravi de te re lire
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Patrick

    En effet, tu as raison. Mais je voulais intervenir uniquement sur ta remarque
    ensuite pour etre honete moi aussi j'ai testé de nombreuse fois ce tutoriel a la lettre pres !!!et ca n'a jamais fonctionner malgré que ca devrait

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Ahhhh merci!!!!! Ton code est super clair!!! je vais m'en inspirer de ce pas!!

    Juste pour être sur pour ces deux lignes la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim cls() As New Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set cls(i).ChkBx = chx: Set cls(i).TxTB = txt
    ici c'est comme si tu déclarais cela un peu comme un tableau en faite? ça m'a un peu perturbé en faite que tu déclarer cls comme une instance de la classe1 alors que nous somme déjà dans la classe1...

    Mais sinon c'est plus clair dans ma tête

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Contre exemple

    Module de classe Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public WithEvents ChkBx As MSForms.CheckBox
     
    Private Sub ChkBx_Click()
    Dim Tmp As String
     
    Tmp = Replace(ChkBx.Name, "Vt", "Tt")
     
    UserForm1.Controls(Tmp).Visible = ChkBx.Value
    End Sub
    Module de l'userform Userform1
    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
    Option Explicit
     
    Dim ColC As Collection
     
    Private Sub UserForm_Initialize()
    Dim vTube As msforms.CheckBox
    Dim tTube As msforms.TextBox
    Dim Tube As msforms.Page
    Dim Clas As New Classe1
    Dim i As Integer
     
    Set ColC = New Collection
    Set Tube = Me.MultiPage1.Pages(2)
     
    For i = 0 To 11
        With Tube
            Set vTube = .Controls.Add("forms.Checkbox.1")
     
            With vTube
                .Name = "Vtube" & i
                .Left = 90
                .Height = 18
                .Top = 30 + i * 29
                .Width = 24
                .Caption = ""
                .Value = False
     
            End With
            Set Clas = New Classe1
            Set Clas.ChkBx = vTube
            ColC.Add Clas
     
            Set vTube = Nothing
            Set tTube = .Controls.Add("forms.Textbox.1")
            With tTube
                .Name = "Ttube" & i
                .Left = 156
                .Top = 30 + i * 29
                .Height = 18
                .Width = 40
                .TextAlign = 2
                .Visible = False
            End With
            Set tTube = Nothing
     
        End With
    Next i
    Set Tube = Nothing
    End Sub
    Je voulais juste te demander, pourquoi faut-il détruire l'objet à chaque fois?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Set tTube = .Controls.Add("forms.Textbox.1")
            With tTube
                .Name = "Ttube" & i
                .Left = 156
                .Top = 30 + i * 29
                .Height = 18
                .Width = 40
                .TextAlign = 2
                .Visible = False
            End With
            Set tTube = Nothing

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    je viens de tester ton code mercatog ca match, tu veux bien essayer dans ton model d'intégrer le textbox en association

    en ce qui concerne mon model si je dois l'adapter a la precision faite par lackam avec son multipage pendant que je le faisait c'est simple
    on change l'argument" me-->>uf" de l'appel et function pour le multipage.pages(x)

    dans le userform code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cl As New Classe1
    Private Sub CommandButton1_Click()
    cl.initiate MultiPage1.Pages(2)
    End Sub
    et la classe c'est la meme sauf que l'on remplace "uf" par "pag"
    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
    Option Explicit
    Public WithEvents ChkBx As MSForms.CheckBox
    Public WithEvents TxTB As MSForms.TextBox
    Dim cls() As New Classe1
    Function initiate(pag)
        Dim i&, chx As Object, txt As Object
        For i = 1 To 3    'boucle pour la création des CheckBox
            ReDim Preserve cls(1 To i)
            Set chx = pag.Controls.Add("forms.Checkbox.1")    'on ajoute dynamiquement le checkbox
            Set txt = pag.Controls.Add("forms.TextBox.1")    ' on ajoute dynamiquement le textbox qui va etre associé a ce checkbox
            'on les place et dimentionne
            With chx: .Name = "moncheckbox" & i: .Object.Caption = "le texte" & i: .Left = 140: .Top = 30 * i + 10: .Width = 50: .Height = 20: End With
            With txt: .Name = "montextbox" & i: .Object.Value = "le texte" & i: .Left = 40: .Top = 30 * i + 10: .Width = 80: .Height = 20: .Visible = False: End With
            'ajout de l'objet dans la classe
            Set cls(i).ChkBx = chx: Set cls(i).TxTB = txt    'en les mettant dans la meme classe il seront associés(voir explication dans l'evenement)
        Next i
    End Function
    'Exemple pour gérer l'évènement clic sur les objets type CheckBox
    Private Sub ChkBx_Click()
    'cet exemple affiche le nom et la valeur de l'objet cliqué
        If ChkBx = True Then TxTB.Visible = True Else TxTB.Visible = False ' si le checkbox est true le textbox est visible sinon invisible
       'comment il sont associé chacun par paire(checkbox/textbox)???????
    'et bien c'est tout simple
    'en mettant le txt et le chx dans la meme instance de la classe  dans la boucle dans initiate
    'dans l'evenement TxTB c'est le textbox qui a été placé dans la meme instance
    'autrement dit l' instance(1) de la classe1  il y a moncheckbox1 avec montextbox1
    'dans l' instance(2) de la classe1  il y a moncheckbox2 avec montextbox2
    'etc.....
    End Sub
    '--------------------------------------
    a noter aussi bien que l'on peut pas le rater des yeux, je fait non seulement l'integration mais la construction dans la classe et non dans le userform
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    je viens de tester ton code mercatog ca match, tu veux bien essayer dans ton model d'intégrer le textbox en association

    en ce qui concerne mon model si je dois l'adapter a la precision faite par lackam avec son multipage pendant que je le faisait c'est simple
    on change l'argument" me-->>uf" de l'appel et function pour le multipage.pages(x)

    dans le userform code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cl As New Classe1
    Private Sub CommandButton1_Click()
    cl.initiate MultiPage1.Pages(2)
    End Sub
    C'était la question que je voulais te poser, encore un grand merci
    (c'était pas évident quand même de penser au tableau pour lier les deux objets dans le module classe ^^")

    Je vais abuser et je m'en excuse mais comme tu crées les objets dans ton module classe, comment fais tu alors pour récupérer la valeur de tes textbox et de tes checkbox?? (comme ces derniers n'étant alors plus déclaré dans l'userform)

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je comprends pas bien le contexte de ta question

    dans n'importe quel endroit du classeur tu me faire par exemple msgbox userform1.montextbox1.text

    dans la classe dans mon model tu peux simplement ajouter l'evenement change des TxTB puisqu'il sont instancié en tant que tel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'evenement TextBox
    Private Sub TxTB_Change()
    MsgBox TxTB.Name & " valeur: " & TxTB.Value
    End Sub
    en ce qui concerne le model de Mercatog
    je l'ai modifié dans le sens ou j'assovie checkbox/textbox par paire comme mon model il falait ajouter une ligne danq la classe et deplacer l'instanciation dans le userform
    mercatog confirmera si c'est propre ou pas
    code mercatog userform
    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
    Option Explicit
    Dim ColC As Collection
     
    Private Sub UserForm_Activate()
        Dim vTube As MSForms.CheckBox
        Dim tTube As MSForms.TextBox
        Dim Tube As MSForms.Page
        Dim Clas As New Classe2
        Dim i As Integer
        Set ColC = New Collection
        Set Tube = Me.MultiPage1.Pages(2)
        For i = 0 To 11
            With Tube
                Set vTube = .Controls.Add("forms.Checkbox.1")
                With vTube
                    .Name = "Vtube" & i
                    .Left = 90
                    .Height = 18
                    .Top = 30 + i * 29
                    .Width = 24
                    .Caption = ""
                    .Value = False
                End With
                Set tTube = .Controls.Add("forms.Textbox.1")
                With tTube
                    .Name = "Ttube" & i
                    .Left = 156
                    .Top = 30 + i * 29
                    .Height = 18
                    .Width = 40
                    .TextAlign = 2
                    .Visible = False
                End With
                Set Clas = New Classe2
                Set Clas.ChkBx = vTube
                Set Clas.TxTB = tTube
                ColC.Add Clas
            End With
        Next i
        Set tTube = Nothing
        Set vTube = Nothing
        Set Tube = Nothing
    End Sub
    code classe2 mercatog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents ChkBx As MSForms.CheckBox
    Public WithEvents TxTB As MSForms.TextBox
    Private Sub ChkBx_Click()
        TxTB.Visible = ChkBx.Value
    End Sub
    mille excuse mercatog d'avoir tripatouiller dans ton code

    et pour que tu sois tranquille avec ca voici un fichier avec ma methode "Userformpatrick" et le model de mercatog modifié par paire en association
    y compris tout les deux avec les evenement textboxs
    tu pourra prendre le temps de lire les code et te faire ton exeprience sur les classes controls
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Merci pour tout! je vais de ce pas tripouiller tout ça pour l'adapter à mon projet.

    Pour revenir à ma question, en faite si la checkbox est cliqué, la valeur de ma textbox est renvoyé dans un tableau créé dans une sous-routine de mon userform:
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if chx.value=true then
    redim preserve tableau(1, ubound(tableau,2))
    tableau(1,ubound)=textbox.Value
    end if
    Mais je vais essayer tout ce que tu 'mas fourni déjà merci!

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if chx.value=true then
    redim preserve tableau(1, ubound(tableau,2))
    tableau(1,ubound)=textbox.Value
    end if
    non !!!!dans ce cas la tout ton project est bancale puisque basé sur l'incompréhention des module classe
    tu ne peux pas créer x controls et demander la gestion dans le userform sauf par passage par la classe et renvoie sur userform
    mais perso je n'en vois pas l'utilité autant creer tes check et txtb en dur dans VBE alors

    tout ton code qui subit des changement par les evenements des controls dynamique doit etre gérer dans la classe ou!!!par la classe

    en aucun tu pourra gerer ca directement dans le userform par leur evenement car il n'existent pas ses evenement dans le userform il existent dans la classe
    donc soit le code ci dessu va dans la classe soit tu le met dans une public sub dans ton userform et tu l'appelle de la classe
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Je crois que j'ai dû m'embrouiller dans ma réflexion...
    Alors voila j'ai utilisé la deuxième méthode que tu me proposes car cela me permettrait d'utiliser mon module classe que juste comme une gestion des évènements de mes contrôles.

    Dans une sous-routine du userform avec Vtube et Ttube déclaréé en début de module
    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
     
    Dim i As Integer
    Dim Colc As Collection
    Dim clas As cTube
     
     
        Set tube = MultiPage1.Pages(2)
     
        For i = 0 To 11
            With tube
                Set Vtube = .Controls.Add("forms.Checkbox.1")
                Set Ttube = .Controls.Add("forms.Textbox.1")
            End With
     
            With Vtube
                .Name = "Vtube" & i
                .Left = 90
                .Height = 18
                .Top = 30 + i * 29
                .Width = 24
                .Caption = ""
                .Value = False
            End With
     
            With Ttube
                .Name = "Ttube" & i
                .Left = 156
                .Top = 30 + i * 29
                .Height = 18
                .Width = 40
                .TextAlign = 2
                .Visible = False
            End With
            Set clas = New cTube
            Set clas.ChkBx = Vtube
            Set clas.TxTB = Ttube
            Colc.Add clas
        Next
    Dans le module classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Option Explicit
    Private WithEvents ChkBx As msforms.CheckBox
    Private WithEvents TxTB As msforms.TextBox
     
    Private Sub ChkBx_Click()
        TxTB.Visible = ChkBx.Value
    End Sub
    Excel me dit que la variable ChkBx et TxtB sont des variables non définies.....

  18. #18
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Entre Public et private il y a différence notoire.

    mille excuse mercatog d'avoir tripatouiller dans ton code
    Patrick

    Tu assure amplement!

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    J'ai finalement réutilisé ton code avec le nom de tes variables et cela fonctionne correctement... J'ai dû faire une erreur de syntaxe...
    En tout cas avec cette méthode j'ai pu gérer un évènement click avec mes checkbox crées dynamiquement.

    En tout cas mille mercis à toi Patrick pour ton aide et aussi à Mercato

    Juste une dernière question: Pourquoi détruire ces trois objets à la fin?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Set tTube = Nothing
        Set vTube = Nothing
        Set Tube = Nothing

  20. #20
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour libérer l'espace mémoire alloué lors de la déclaration des variables objet

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/09/2015, 22h28
  2. question sur la gestion des css
    Par boustor dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 31/07/2006, 16h57
  3. Question sur la gestion de l'affichage en VBA
    Par papilou86 dans le forum Access
    Réponses: 5
    Dernier message: 29/05/2006, 10h26
  4. Quelques questions sur la gestion des droits
    Par sylsau dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/03/2006, 14h11
  5. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58

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