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 :

Gestion d'évènements sur Checkbox Dynamique [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Par défaut Gestion d'évènements sur Checkbox Dynamique
    Bonjour à tous,

    Voilà 3 jours que je commence à manipuler ce nouveau langage, et j'avoue tomber sur une coquille.

    L'idée est la suivante :

    Je génère de façon dynamique (selon le chiffre entré par l'utilisateur) plusieurs choses (sur un seul et même Frame) dont une CheckBox qui se nomme" CB_NIV1".

    Je souhaiterai déclencher l'affichage d'autres choses une fois que cette CheckBox ( CB_NIV1) est validée. Ce n'est surement pas une bonne façon de procéder, mais étant débutant, la gestion de mes affichages dynamiques ne se font pas à l'aide de classeS ou autre.

    En fouillant un petit peu sur internet, j'ai bien compris que j'allais de toute façon devoir faire face à cette histoire de classe, ducoup, j'ai tenté mais pas je n'ai pas eus le succès escompté haha..

    Alors voilà mon code inséré dans mon userform, avec également la déclaration de mon Frame:
    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 FRM As MSForms.Frame
      Dim CB_PRESENCE_SOUS_COMPTEURS_N2 As MSForms.CheckBox
     
      ' Creation du cadre affichant les compteurs principaux
        Set FRM = Controls.Add("forms.frame.1", "FRM_N1_" & i, Visible = True)
        With FRM
            .Top = PosY
            .Left = 0
            .Height = 100
            .Width = 450
            .Caption = "Niveau 1-Entrez le nombre de sous compteurs de niveau 2 pour chaque compteurs de niveau 1"
       End With
     
     
       ' Placement d'CB si présence de sous compteurs de niveau3
       Set CB_PRESENCE_SOUS_COMPTEURS_N2 = FRM.Controls.Add("forms.checkBox.1", "CB_NIV1", Visible = True)
       With CB_PRESENCE_SOUS_COMPTEURS_N2
            .Top = 50
            .Left = 200
            .Height = 20
            .Width = 180
            .Caption = "Présence de sous compteurs de niveau 3"
     
            Dim Action As New Classe1
            Set Action.CB_EVENT = FRM.Controls("CB_NIV1")
     
     
      End With

    Et voici le code de ma classe intitulée Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Option Explicit
     
    Public WithEvents CB_EVENT As MSForms.CheckBox
     
    Private Sub CB_EVENT_click()
      MsgBox ("Clickezzzzzzzzzzzzzzzzzzzzzzzzzzzzzd !")
    End Sub

    Et toute logique, je devrais avoir un Msg suite au cochage de ma CB mais ce n'est pas le cas !!

    Voila voila il y a surement des abérrations dans mon code mais bon, se sont les débuts !

    Merci d'avance !!!!!!!!!!!!!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec la démarche suivante
    1) Créez un UserForm1
    2) Copiez le code suivant dans la fenêtre de code du 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
    Dim ColCheckBox As New Collection
     
    Private Sub UserForm_Initialize()
    Dim obEvents As clsControlsEvents
    Dim CTL As MSForms.Control
    Dim FR As MSForms.Frame
    Dim CB As MSForms.CheckBox
    Dim i&
    '--- Frame dynamique ---
    Set FR = Me.Controls.Add("Forms.Frame.1")
    '--- CheckBoxes dynamiques ---
    For i& = 1 To 3
      Set CB = FR.Controls.Add("Forms.CheckBox.1")
      CB.Caption = "Toto " & i&
      CB.Top = FR.Top + (15 * i&)
    Next i&
    '--- Evènement des CheckBoxes ---
    For Each CTL In Me.Controls
      If TypeOf CTL Is MSForms.CheckBox Then
        Set obEvents = New clsControlsEvents
        Set obEvents.CBx = CTL
        Set obEvents.USF = Me
        ColCheckBox.Add obEvents
      End If
    Next CTL
    End Sub
    3) Créez un module de Classe et renommez le clsControlsEvents
    4) Copiez le code suivant dans le module de Classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public WithEvents CBx As MSForms.CheckBox
    Public USF As UserForm
     
    Private Sub CBx_Click()
    MsgBox "Name : " & CBx.Name & vbLf & _
           "Caption : " & CBx.Caption & vbLf & _
           "Value : " & CBx.Value
    End Sub
    5) Dans un module Standard, copiez le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub aa()
    UserForm1.Show
    End Sub
    Lancez la macro aa

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Par défaut
    Merci beaucoup pour ta réponse!

    En effet ton code marche parfaitement et me renvoie bien l'état de ma checkBox. Cependant je ne parviens pas à déclencher l'affichage d'un autre cadre ou serait encore fixée une autre CheckBox juste en dessous de la première.

    Il faudrait idéalement que je puisse récupérer l'état de la CheckBox là ou est mon code du UserForm, histoire de pouvoir poser une condition du type

    If CheckBox.Valeur=True then
    '' Déclencher affichage d'un cadre avec une CheckBox d'attachée.

    J'ai tenté de déclencher ce type d'affichage là ou je pensais pouvoir récupérer l'état de la CheckBox (là ou est codé la classe clsControlsEvents) mais sans succès. Si quelqu'un à une idée !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Cependant je ne parviens pas à déclencher l'affichage d'un autre cadre ou serait encore fixée une autre CheckBox juste en dessous de la première.
    Je suppose que "autre cadre" signifie "autre Frame".
    Si c'est bien le cas, changez le code du UserForm (et rien d'autre) par le code suivant
    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
    Dim ColCheckBox As New Collection
     
    Private Sub UserForm_Initialize()
    Dim obEvents As clsControlsEvents
    Dim CTL As MSForms.Control
    Dim FR As MSForms.Frame
    Dim CB As MSForms.CheckBox
    Dim i&
    '--- Frame dynamique ---
    Set FR = Me.Controls.Add("Forms.Frame.1")
    '--- CheckBoxes dynamiques ---
    For i& = 1 To 3
      Set CB = FR.Controls.Add("Forms.CheckBox.1")
      CB.Caption = "Toto " & i&
      CB.Top = FR.Top + (15 * i&)
    Next i&
    '##############
    '--- 2ème Frame dynamique ---
    Set FR = Me.Controls.Add("Forms.Frame.1")
     FR.Top = 80
    '--- CheckBoxes dynamiques ---
    For i& = 1 To 2
      Set CB = FR.Controls.Add("Forms.CheckBox.1")
      CB.Caption = "Zaza " & i&
      CB.Top = FR.Top + (15 * i&)
    Next i&
    '##############
    '--- Evènement des CheckBoxes ---
    For Each CTL In Me.Controls
      If TypeOf CTL Is MSForms.CheckBox Then
        Set obEvents = New clsControlsEvents
        Set obEvents.CBx = CTL
        Set obEvents.USF = Me
        ColCheckBox.Add obEvents
      End If
    Next CTL
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Par défaut
    Merci pour la rapidité de la réponse !
    Oui en effet le cadre correspond au Frame.
    Alors soit je ne suis pas doué, ou bien aveugle, mais le deuxième cadre ne s'affiche pas !

    Et ce que je souhaite faire c'est conditionner le deuxième affichage. Dans le cas de votre code, ce serait faire, algorithmiquement parlant: If CheboxToto1=True ( est cochée) then '' Affichage deuxième frame avec checkBox

    Rectification, j'ai bien en effet l'affichage du deuxième Frame, mais maintenant j'essaye de conditionner son affichage ( voir message précédent)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pourquoi tester If CheckBox.Value=True then alors fram1.visible=CheckBox.value suffit

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

Discussions similaires

  1. JQuery: évènement sur checkbox
    Par sawati dans le forum jQuery
    Réponses: 4
    Dernier message: 19/09/2010, 20h04
  2. [VB.net]detecter evenement sur checkbox dynamique
    Par manaboko dans le forum VB.NET
    Réponses: 5
    Dernier message: 18/12/2009, 07h52
  3. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  4. Gestion d'évènements sur un form
    Par Miss Ti dans le forum VBA Access
    Réponses: 9
    Dernier message: 24/01/2008, 16h10
  5. événement sur composants dynamiques
    Par kirua2150 dans le forum Delphi
    Réponses: 5
    Dernier message: 02/05/2007, 03h33

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