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 :

mémoriser les checkbox créés dynamiquement afin de les utiliser ultérieurement


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Points : 49
    Points
    49
    Par défaut mémoriser les checkbox créés dynamiquement afin de les utiliser ultérieurement
    bonjour,

    J'ai déjà fait appel pour m'aider sur la création de checkbox dynamiquement dont le lien est le suivant:

    http://www.developpez.net/forums/d83...liste-produit/

    Je n'arrive pas à modifier le code une fois le checkbox créés.
    je souhaiterais selectionner certain checkbox puis à partir d'un command bouton utiliser les noms associés aux checkbox pour les utliser comme filtre.

    Merci pour votre aide.

    Chrysto

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour chrystobale le forum que veut tu faire exactement ??
    SALUTATIONS

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    Bonjour Leatitia et le Forum,
    On va dire que je bloque sur les points suivants à résoudre :

    A partir de mon fichier excel, j’ai des données pour lesquels j’ai dans un UserForm des checkbox qui se créaient dynamiquement lorsque j’appuie sur un ButtonCommand1(client). Les checkbox qui sont donc créés dynamiquement le sont en fonction d’une colonne de donnée bien précise (ex : client). Le résultat est donc de 3 Checkbox créés si j’ai 3 clients (ClientA, ClientB, ClientC).

    De la même manière un second ButtonCommand2(produit) me permait de créer des checkbox dynamiquement en fonction d’une autre colonne de donnée (ex : Produit). Le résultat est donc 6 Checkbox si j’ai 6 produits (produitA, produitB, produitC, … produitF). Les check box sont correctement créés les uns sous les autres sans problème.

    Mon but est de sélectionner (1 ou tous) les clients et/ou de sélectionner (1 ou tous) les produits de mon choix en cliquant dessus
    Une fois mes clients et/ou produits identifiés je souhaiterais lancer une action avec un simple bouton. Laction serait par exemple de lancer une macro par exemple, où seraitcalculé le nombre de pb par client et/ou par produit …


    Comment dois-je m’y prendre ? …..

    A terme, je souhaiterais supprimer les ButtonsCommand 1&2 (ils sont présents pour du débug uniquement)


    Cordialement,

    Chrysto
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, ok je regarderais demain si pas de reponse d'ici la. pas trop de temps en ce moment a+
    SALUTATIONS

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    Bonjour le Forum,
    Je pense avoir trouvé une solution laternative mais pas nécessairement la meilleurs (si vous en avait une autre je suis preuneur).
    Cette solution vient du tutorial Excel ( Utiliser les contrôles dans un UserForm )
    on peut utiliser le
    .GroupName
    pour regourper des controles ensembles.
    Aussi dans la création dynamique de mes Checkbox j'ai réjouté .GroupName = "client" et .GroupName = "product".
    J'ai rajouté ensuite un bouton dans lequel j'ai mis le code suivant que je vais peut être mettre au travers d'une fonction car le pavet de code est mis 2 fois (1 pour client et l'autre pour product) - autant optimiser ...

    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
    Dim Ctrl As Control
     
        'Boucle sur tous les contrôles
        For Each Ctrl In Me.Controls
            'Vérifie qu'il s'agit d'un OptionButton
            If TypeOf Ctrl Is MSForms.CheckBox Then
                'Véfifie si l'OptionButton fait partie d'un groupe nommé "GR1"
                 If Ctrl.GroupName = "product" Then
                    'Affiche le Caption de l'optionButton qui a la valeur True
                    If Ctrl.Value = True Then
                        MsgBox Ctrl.Caption
                        'Sort de la boucle (Il ne peut y a voir qu'une
                        'réponse à True)
                        'Exit For
                    End If
                End If
            End If
                    If TypeOf Ctrl Is MSForms.CheckBox Then
                'Véfifie si l'OptionButton fait partie d'un groupe nommé "GR1"
                 If Ctrl.GroupName = "client" Then
                    'Affiche le Caption de l'optionButton qui a la valeur True
                    If Ctrl.Value = True Then
                        MsgBox Ctrl.Caption
                        'Sort de la boucle (Il ne peut y a voir qu'une
                        'réponse à True)
                        'Exit For
                    End If
                End If
            End If
        Next
    End Sub
    Qu'est ce que vous en pensez ?

    Merci,

    Chrysto

  6. #6
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour chrystobale le forum c'est une possibilitee

    autremement cree 2 classes une pour chaque groupes
    puis coder dans les modules de classe

    autremement pourquoi tu mets des boutons pour cree tes chec..
    tu peus le mettre dans initialize
    un exemple avec 2 classes
    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
     Private Sub UserForm_Initialize()
    Com1
    Com2
    End Sub
     Private Sub Com1()
    Dim Obj As Control, c As Range, V As New Collection, Cl1 As Classe2, i As Integer, toto As String
    Set Collect1 = New Collection
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("c7", [c65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    For i = 1 To V.Count
        Set Obj = Controls.Add("forms.Checkbox.1")
        With Obj
            .GroupName = "client"
            .Name = "moncheckbox" & i
           .Object.Caption = V.Item(i)
            .Left = 10
            .Top = 30 * i + 10
            .Width = 50
            .Height = 20
        End With
           Set Cl1 = New Classe2
        Set Cl1.ChkBx1 = Obj
         Collect1.Add Cl1
    Next i
     End Sub
     Private Sub Com2()
    Dim Obj As Control, c As Range, V As New Collection, Cl As Classe1, i As Integer, toto As String
    Set Collect = New Collection
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    For i = 1 To V.Count
     Set Obj = Controls.Add("forms.Checkbox.1")
        With Obj
            .GroupName = "product"
            .Name = "moncheckbox" & i
                 .Object.Caption = V.Item(i)
            .Left = 90
            .Top = 30 * i + 10
            .Width = 50
            .Height = 20
        End With
           Set Cl = New Classe1
        Set Cl.ChkBx = Obj
         Collect.Add Cl
    Next i
    End Sub
    module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Collect As Collection
    Public Collect1 As Collection
    code dans module de classe
    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
    Private Sub ChkBx_Click()
    Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
    If Ctrl.GroupName = "product" Then
    If Ctrl.Value = True Then
    MsgBox Ctrl.Caption
    End If: End If: End If: Next
    End Sub
    idem pour l'autre
    SALUTATIONS

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    Bonjour Leatitia,

    Merci pour cette proposition qui me convient nettement.
    Je suis tombé sur un pb de déclaration sur Cl1 As Classe2
    J'ai remplacé par Cl1 As Classe1.
    Même combat sur mais c'est normal car le ChkBx1 n'était pas créé dans le module de class. Ce que je comprends parce qu'il faut aussi que je bosse un peu !!! :-)

    Pour répondre à ta quesiton, j'utilise 2 boutons car j'en utilise déjà pour faire des ouvertures et fermetures de fichiers. Je ne peux donc pas mettre com1 et com2 à l'initialisation. Je vais les mettre en fois que mon fichier de Output est ouvert ...
    Merci encore !

    Chrysto

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, quand je disais "idem" pour l'autre on l'ecris quand meme differamment

    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 ChkBx1 As MSForms.CheckBox
    Private Sub ChkBx1_Click()
    Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
    If Ctrl.GroupName = "client" Then
    If Ctrl.Value = True Then
    MsgBox Ctrl.Caption
    End If: End If: End If: Next
    End Sub
    tu peus aussi appeler une macro commune

    classe2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents ChkBx1 As MSForms.CheckBox
    Private Sub ChkBx1_Click()
    essai
    End Sub
    classe1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents ChkBx As MSForms.CheckBox
    Private Sub ChkBx_Click()
    essai
    End Sub
    la macro eventuellement tu la mets dans le module ou tu as declare tes variables public,cela peut te donner des idees pour la suite de ton programme

    exemple tres basique

    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
    Option Explicit
    Public Collect As Collection
    Public Collect1 As Collection
    Sub essai()
    Dim Ctrl As Control, i As Long, x As Variant
    For Each Ctrl In UserForm1.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
    If Ctrl.GroupName = "client" Then
    If Ctrl.Value = True Then
    x = 0
    For i = 7 To Range("c65536").End(xlUp).Row
    If Cells(i, 3) = Ctrl.Caption Then
    x = x + Cells(i, 1).Value
    End If
    Next
    MsgBox Ctrl.Caption & "  nb..pb=   " & x
    End If: End If: End If: Next
    '**************
    For Each Ctrl In UserForm1.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
    If Ctrl.GroupName = "product" Then
    If Ctrl.Value = True Then
    x = 0
    For i = 7 To Range("d65536").End(xlUp).Row
    If Cells(i, 4) = Ctrl.Caption Then
    x = x + Cells(i, 1).Value
    End If
    Next
    MsgBox Ctrl.Caption & "  nb..pb=   " & x
    End If: End If: End If: Next
    End Sub
    SALUTATIONS

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    Merci Leatitia pour ta patience et ton aide précieuse !
    tes remarques et propositions sont tout simplement excellentes !

    Sincérement,

    Chrysto

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 21/11/2014, 18h50
  2. Réponses: 2
    Dernier message: 15/10/2014, 23h42
  3. Procedures associées aux composants checkbox créés dynamiquement
    Par jeanparfait dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/01/2013, 10h37
  4. Réponses: 2
    Dernier message: 11/05/2010, 19h36
  5. Supprimer tous les labels créés dynamiquement d'un control
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2009, 11h48

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