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 :

Checkbox Dynamique et Event


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 21
    Par défaut Checkbox Dynamique et Event
    Bonjour,

    Actuellement j'ai fais un formulaire qui utilise un multipage contenant des checkbox et des commandButton sur chaque page crées dynamiquement.

    La création des pages du multipage se fait dynamiquement et de même pour les Checkbox et les commandbuttons.

    J'arrive à créer des évenements de mes checkbox et de même pour les commandButton.

    Mon problème : C'est que je n'arrive pas faire intérargir mes Checkbox en fonction d'un commandButton.
    Mon idée c'est que quand j'appuis sur un bouton les checkbox que j'ai selectionné mettent des leur nom sur une cellule.

    Quelqu'un serait m'aider sur problème. Merci
    J'ai essayé ceci dans un module classe mais sa fonctionne pas :
    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
    Option Explicit
     
     
    Public WithEvents Cmd As MSForms.CommandButton
    Public WithEvents ChkBx As MSForms.Checkbox
     
     
    '===>>Code qui permet l'Action des CheckBox<<======= 
     
       ' Public Sub ChkBx_click()
     
     
         ' If ChkBx.Value = True Then
         ' MsgBox ChkBx.Name & " : " & ChkBx.Value
            'Dim compteur As Integer
     
                'compteur = 0
     
                'While Sheets("Sheet1").Cells(compteur + 5, 3) <> ""
                    'compteur = compteur + 1
               ' Wend
                'Sheets("Sheet1").Cells(compteur + 5, 3) = ChkBx.Caption
           ' End If
     
    'End Sub
     
    ' Création d'un commandButton  qui fait intéragir des CheckBox
    Public Sub Cmd_Click()
     MsgBox Cmd.Name & " : " & Cmd.Value
     
     If ChkBx.Value = True Then
        MsgBox ChkBx.Name & " : " & ChkBx.Value
            Dim compteur As Integer
     
                compteur = 0
     
                While Sheets("Sheet1").Cells(compteur + 5, 3) <> ""
                    compteur = compteur + 1
                Wend
                Sheets("Sheet1").Cells(compteur + 5, 3) = ChkBx.Caption
            End If

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    A mon avis il faut parcourir la collection Controls et tester le type pour récupérer les CheckBox

  3. #3
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Citation Envoyé par Vin_SuFu_R@T Voir le message
    Bonjour,
    J'ai essayé ceci dans un module classe mais ça ne fonctionne pas :
    Dans ton formulaire, as-tu une référence au module de classe ?

    Voici un exemple :

    Extrait du code dans le module d’un formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Dim TextBoxes() As New ClasseTextBoxes
    Ici, ClasseTextBoxes est le nom du 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
    Private Sub UserForm_Initialize()
    Dim TextBoxesCount As Integer, Ctrl As Control
        ' ...
        ' Création de la collection de TextBoxes, gérée par le module de classe (uniquement ceux dont le nom commence par TF ou TS)
        TextBoxesCount = 0
            For Each Ctrl In Controls
                ' TextBoxes
                    If Left(Ctrl.Name, 2) = "TF" Or Left(Ctrl.Name, 2) = "TS"  Then
                        TextBoxesCount = TextBoxesCount + 1
                        ReDim Preserve TextBoxes(1 To TextBoxesCount)
                        Set TextBoxes(TextBoxesCount).TextBoxes = Ctrl
                    End If
            Next
    End Sub

    Extrait du code dans le module du module de classe ClasseTextBoxes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Public WithEvents TextBoxes As MSForms.TextBox
     
    Private Sub TextBoxes_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        SaisieAuto = True
            If TextBoxes.Parent.Name = ' ... L’événement DblClick n’est à gérer que pour 1 seul UserForm  
                ' ...
        SaisieAuto = False
    End Sub

    D’autre part,, dans ton code,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub Cmd_Click()
     MsgBox Cmd.Name & " : " & Cmd.Value
     
     If ChkBx.Value = True Then
    Le module de classe est capable de gérer l’événement Click d’un bouton Cmd, mais au sein de la procédure, ChkBx est une variable qui n’est pas rattachée à un CheckBox particulier.

    Pour t’aider plus, il faudrait un extrait de code + conséquent en en précisant la source : code de module de classe ou code du UserForm.

    Cordialement,

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonsoir,
    La création des pages du multipage se fait dynamiquement et de même pour les Checkbox et les commandbuttons.

    J'arrive à créer des évenements de mes checkbox et de même pour les commandButton.

    Mon problème : C'est que je n'arrive pas faire intérargir mes Checkbox en fonction d'un commandButton.
    Mon idée c'est que quand j'appuis sur un bouton les checkbox que j'ai selectionné mettent des leur nom sur une cellule.
    comment as tu fais pour donner des noms differents a tes checkbox en les créeant dynamiquement ?

    a part un nom du genre "chkbox & i "je ne vois pas

    alors pour liéer le nom des checkbox à des cellules....

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Sans indication supplémentaire sur ton code, difficile de t’aider

    Cordialement,

  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
    Bonsoir,

    Mon problème : C'est que je n'arrive pas faire intérargir mes Checkbox en fonction d'un commandButton.
    Mon idée c'est que quand j'appuis sur un bouton les checkbox que j'ai selectionné mettent des leur nom sur une cellule.
    Je suis tenté de dire que le seul évènement que tu dois récupérer est le click sur le bouton, ce que tu sais visiblement faire. A partir de la ton probleme est d'obtenir une référence vers un nombre indéterminé de CheckBox.

    Pour cela tu peux procéder ainsi dans ton 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
    Public MesCheckBox As Collection
    Public WithEvents Cmd As MSForms.CommandButton
     
    Private Sub Class_Initialize()
        Set MesCheckBox = New Collection
    End Sub
     
    Private Sub Cmd_Click()
        Dim Chb As MSForms.CheckBox
        For Each Chb In MesCheckBox
            'ton code
        Next
    End Sub
    Dans ton formulaire une fois ton module de classe instancié, à chaque création d'un checkbox tu l'ajoute à la collection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim MonBouton As Classe1 'le nom de ton module de classe ici
     
    Private Sub UserForm_Initialize()
        Dim UncheckBox As MSForms.CheckBox
        Set MonBouton = New Classe1
     
        Set UncheckBox = Me.Controls.Add("Forms.CheckBox.1")
        MonBouton.MesCheckBox.Add UncheckBox
    End Sub
    Si tu as également besoin d'utiliser les évènements des checkbox alors il faut ajouter à la collection une instance d'un autre module de classe contenant une variable WithEvents de type Checkbox.

    Pour une réponse plus précise ... il faut que tu précise ta question.

    Cordialement,

    Tirex28/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 21
    Par défaut
    Bonjour,

    Désolé ne pas avoir mis d'autres informations, Je ne savais pas quoi trop mettre pour que sa demeure toujours lisible.Je débute totalement, j'ai aucune expérience dans la programmation.

    Patbou pour la création des CheckBox dynamiquement, j'ai utilisé la méthode que tu dis: J'ai fais une boucble For pour crée "n" fois mon Checkbox dont je lui attribut le nom "CheckBox" & i. Ensuite j'ai utilisé un select case pour pouvoir donner un Caption différent à chaque CheckBox.

    Je vous donne plus d'information :
    Pour faire ceci j'ai utilisé quelques tutoriaux et recherche sur ce site.
    Pour mon 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    Private Sub CommandButton6_Click()
     
     
     
     '============>>Définition<<===============================================
     
     
     Dim Pge As Page
     Dim p As Page
     Dim k As Integer
     
     Dim Cb1 As Control  'CheckBox
     Dim Cb2 As Control
     Dim Cb3 As Control
     Dim Cb4 As Control
     Dim Im1 As Control  'Image
     Dim Im2 As Control
     Dim Im3 As Control
     Dim Im4 As Control
     Dim Bt  As Control  'Bouton "OK"
     Dim i As Integer   ' Le nombre de CheckBox et d'images dans une aligné en colone
     
     Dim cl As Class1    '===>> FLEXIBLE EXPORT LINE
     Dim clBt As Class1
     
     
     
     
    '=================================================================================
     
    Set Collect = New Collection
     
     
     
     
    'Compteur d'onglet dans le Multipage1 :
     
    k = MultiPage1.Pages.Count
     
     
    Select Case ComboBox1.text
     
      Case "Flexible Export Line":
     
     
    '===============>> FLEXIBLE EXPORT LINE <<============================
     
     
    'Ajoutter une nouveau onglet Flexible Export Line sur le multipage :
     
    Set Pge = UserForm1.MultiPage1.Pages.Add("Flexible Export Line n°" & k)
    Set p = MultiPage1.Pages(k)
     
     
     
     
     
     
     
     'Création de l'ensemble des images et des checkBox:
     
    For i = 1 To 10
    Set Cb1 = p.Controls.Add("forms.Checkbox.1", "CheckboxFEL" & i, True)
    Set Im1 = p.Controls.Add("forms.Image.1", "Image1" & i, True)
     
    ' Caption des boutons de la 1 er colone :
     
    Select Case Cb1.Name
                Case "CheckboxFEL1":
                Cb1.Caption = "FPSO End Fitting Connection"
                Case "CheckboxFEL2":
                Cb1.Caption = "FPSO Side End Fitting"
                Case "CheckboxFEL3":
                Cb1.Caption = "FPSO Side Bend Stiffener Fixing"
                Case "CheckboxFEL4":
                Cb1.Caption = "FPSO Side Sliding Stiffener"
                Case "CheckboxFEL5":
                Cb1.Caption = "Buoyancy Modules"
                Case "CheckboxFEL6":
                Cb1.Caption = "Buoy Side Sliding Stiffener"
                Case "CheckboxFEL7":
                Cb1.Caption = "Buoy Side Bend Stiffener Fixing"
                Case "CheckboxFEL8":
                Cb1.Caption = "Buoy Side End Fitting Connection"
                Case "CheckboxFEL9":
                Cb1.Caption = "FPSO Side Pulling head"
                Case "CheckboxFEL10":
                Cb1.Caption = "Buoy Side Pulling head"
     
        End Select
     
     
     With Cb1     'Position des CheckBox dans l'onglet
                .Left = 66
                .Top = 30 * (i - 1) + 30
                .Width = 170
                .Height = 20
                End With
     
                 With Im1     'Position des Images dans l'onglet
                .Left = 12
                .Top = 30 * (i - 1) + 30
                .Width = 42
                .Height = 20
                End With
     
     
     
      'ajout de l'objet dans la classe
    Set cl = New Class1
    Set cl.ChkBx = Cb1
    Collect.Add cl
      Next
    'Création d'un bouton "OK" ou "Validé"
    Set Bt = p.Controls.Add("forms.CommandButton.1", "BtFEL", True)  'Création du Bonton "OK"
                With Bt
                .Caption = "Validé"
                .Left = 150
                Top = 150
                .Width = 50
                .Height = 25
                End With
     
    '  ajout de l'objet dans la classe
    Set clBt = New Class1
    Set clBt.Cmd = Bt
    Collect3.Add clBt
     
     
    For i = 1 To 7
     
    Set Cb2 = p.Controls.Add("forms.Checkbox.1", "CheckboxFEL2" & i, True)
    Set Im2 = p.Controls.Add("forms.Image.1", "ImageFEL2" & i, True)
     
                With Cb2     'Position des CheckBox dans l'onglet
                .Left = 350
                .Top = 30 * (i - 1) + 30
                .Width = 170
                .Height = 20
                End With
     
                 With Im2     'Position des Images dans l'onglet
                .Left = 300
                .Top = 30 * (i - 1) + 30
                .Width = 42
                .Height = 20
                End With
     
    'Caption des boutons de la 2éme colone :
     
                 Select Case Cb2.Name
                 Case "CheckboxFEL21":
                 Cb2.Caption = "Pull - in sheave"
                 Case "CheckboxFEL22":
                 Cb2.Caption = "Pull - in working platform"
                 Case "CheckboxFEL23":
                 Cb2.Caption = "Tricat skid"
                 Case "CheckboxFEL24":
                 Cb2.Caption = "Beam Trolley"
                 Case "CheckboxFEL25":
                 Cb2.Caption = "Sheave Support"
                 Case "CheckboxFEL26":
                 Cb2.Caption = "Seafastening"
                 Case "CheckboxFEL27":
                 Cb2.Caption = "Buoyancy Modules Mounting Platform"
     
     
                                Case Else
                                End Select
     
      'ajout de l'objet dans la classe
    Set cl = New Class1
    Set cl.ChkBx = Cb2
    Collect.Add cl
    Next
     
    '===============>>SCR<<=================================
     
    '.... Création des autres onglets et des controls
    End select 
    End sub
    Dans la rubrique MODULE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '=========>>Création de la collection n°2 pour FLEXIBLE EXPORT LINE<<=========
    'dans un module standard
    Option Explicit
     
    Public Collect As Collection
    '--------------------------------------
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '=========>>Création de la collection n°2 pour FLEXIBLE EXPORT LINE<<=========
    'Bouton Bt "Validé"
    Option Explicit
     
    Public Collect3 As Collection
    '--------------------------------------
    Dans la rubrique Class Modul

    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
    Option Explicit
     
     
    Public WithEvents Cmd As MSForms.CommandButton
    Public WithEvents ChkBx As MSForms.Checkbox
     
     
    '===>>Code qui permet l'Action des CheckBox<<======= 
     
       ' Public Sub ChkBx_click()
     
     
         ' If ChkBx.Value = True Then
         ' MsgBox ChkBx.Name & " : " & ChkBx.Value
            'Dim compteur As Integer
     
                'compteur = 0
     
                'While Sheets("Sheet1").Cells(compteur + 5, 3) <> ""
                    'compteur = compteur + 1
               ' Wend
                'Sheets("Sheet1").Cells(compteur + 5, 3) = ChkBx.Caption
           ' End If
     
    'End Sub
     
    ' Création d'un commandButton  qui fait intéragir des CheckBox
    Public Sub Cmd_Click()
     MsgBox Cmd.Name & " : " & Cmd.Value
     
     If ChkBx.Value = True Then
        MsgBox ChkBx.Name & " : " & ChkBx.Value
            Dim compteur As Integer
     
                compteur = 0
     
                While Sheets("Sheet1").Cells(compteur + 5, 3) <> ""
                    compteur = compteur + 1
                Wend
                Sheets("Sheet1").Cells(compteur + 5, 3) = ChkBx.Caption
            End If
    Je vais essayer de suivre vos indications et de revoir ce que j'ai fais en fonction de vos points de vue.
    Merci

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

Discussions similaires

  1. [VB.NET] ImageButton dynamique et event onclick
    Par skoozy dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/06/2006, 14h44
  2. Réponses: 5
    Dernier message: 03/05/2006, 10h27
  3. [MFC] ajout checkbox dynamiquement
    Par moulefrite dans le forum MFC
    Réponses: 9
    Dernier message: 21/04/2006, 19h02
  4. [Struts] checkbox dynamique
    Par Timouyas dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 15/03/2006, 14h55
  5. [Tableaux] CheckBox dynamique, possible en php?
    Par Gumpy dans le forum Langage
    Réponses: 5
    Dernier message: 07/02/2006, 11h46

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