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 :

Créer checkbox dans Userform vierge, puis en cliquant faire apparaitre Listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Par défaut Créer checkbox dans Userform vierge, puis en cliquant faire apparaitre Listbox
    Bonjour à tous,

    Sur un Userform vierge, je souhaiterais faire apparaître une série de checkbox (nombre qui variera mais pour l'exemple ici, disont 10 checkbox).
    Ensuite, en cliquant sur un des checkbox, je souhaiterais faire apparaître un listbox (l'idéal serait de le caler sous le checkbox sélectionné, et donc de faire glisser les checkbox suivant vers le bas).

    J'ai regardé pas mal de tutos qui permettent de faire apparaître ces checkbox (https://www.developpez.net/forums/d1...pe-non-defini/), mais à chaque fois, pour lancer l'application suivante, il faut cliquer sur un CommandButton se trouvant physiquement dans le Userform.

    Si vous pouviez m'aider, ca serait vraiement top.

    Merci

    Bonne jounrée

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Pour faire ce que tu veux, tu peux mettre en place un code qui s'éxécute dès qu'on clic sur la checkbox. C'est de la macro événementielle.

    Pour en savoir plus et voir comment la mettre en place va voir par là :
    https://silkyroad.developpez.com/VBA/UserForm/#LIV

    Et ton code devrait être dans une procédure de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_Click()
     
    End Sub

  3. #3
    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
    je vois tres bien ceque tu veux faire un peu comme les menu "ul-li-/ul" en html en verticale
    ajouté dynamiquement tes checkboxs devront etre sub classé pour la gestion de leurs evenement

    je dis cela comme ca mais tu pourrais faire beaucoup plus simple
    une combobox/to listbox en cascade
    a ce titre le peu de code necessaire pour ca peut te faire economiser un module classe et beaucoup de tracas
    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

  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
    je supose que ce que tu desire devrait ressembler a ca
    Nom : demo.gif
Affichages : 1149
Taille : 75,0 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

  5. #5
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Par défaut
    Salut patricktoulon,

    Merci pour ton retour.

    Sur le principe c'est exactement ca.
    le truc c'est que je trouve qu'avec des checkbox, c'est beaucoup plus jolie.

    La finalité, c'est de reprendre l'exemple de Jacques Boisgontier "Transfert multi colonnes et multisélection" http://boisgontierjacques.free.fr/
    Cliquer sur Liste 1 (de ton exemple), avoir une liste de valeurs qui apparaissent ensuite, que je peux sélectionner pour transférer sur un listbox à droite.

  6. #6
    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 Tullium

    bon alors pour que tu puisse tester :

    1. tu va prendre un fichier vierge
    2. ajouter un userform dans ce fichier vierge
    3. ajouter aussi un module classe que tu nommera "Menucascading" c'est de circonstence


    maintenant dans le userform tu va mettre une listbox a droite de de celui ci ( voir capture)
    dans me module du userform tu va mettre ceci
    c'est ce qui va te permettre de construire le menu entierement dynamiquement car au depart rien n'existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Dim cl As New Menucascading
    Private Sub UserForm_Activate()
        Dim mesItems
        mesItems = Array("menu1", "menu2", "menu3", "menu4", "menu5", "menu6", "menu7", "menu8", "menu9", "menu10")
       cl.initiate_menu Me, mesItems, listedroite, 10, 20, True
     
    End Sub
    dans le modula classe Menucascading 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Option Explicit
    Public WithEvents checkB As MSForms.CheckBox
    Public WithEvents listB As MSForms.ListBox
    Public WithEvents listBD As MSForms.ListBox
    Public usf As Object
    Public mesboutons As Variant
    Dim B() As Object
    Public controles As Variant
    Dim Ct() As Object
    Public listt As Variant
    Dim listo() As Object
    Dim cls() As New Menucascading
    Public gest_in_userf As Boolean
    Function initiate_menu(uf, arrmenu, ListeD, Optional t& = 0, Optional L& = 0, Optional UU As Boolean = False)
        Dim i&, check As Object, liste As Object, a&
        ReDim Preserve cls(UBound(arrmenu))
        For i = 0 To UBound(arrmenu)
            Set check = uf.Controls.Add("Forms.CheckBox.1", "menu" & i): check.Move L, t + (i * check.Height): check.BackColor = &HC0C0C0: check.Tag = i: check.Caption = arrmenu(i)
            Set liste = uf.Controls.Add("Forms.ListBox.1", "listB" & i): liste.Tag = "menu":: liste.Move L, check.Top + check.Height, check.Width, 0
            Set cls(i).checkB = check: Set cls(i).usf = uf: Set cls(i).listB = liste: Set cls(i).listBD = ListeD
            ReDim Preserve listo(0 To i): Set listo(i) = liste
            ReDim Preserve B(0 To i): Set B(i) = check
            a = a + 1: ReDim Preserve Ct(0 To a): Set Ct(a) = check
            a = a + 1: ReDim Preserve Ct(0 To a): Set Ct(a) = liste
        Next
        For i = 0 To UBound(arrmenu): cls(i).mesboutons = B: cls(i).controles = Ct: cls(i).listt = listo: cls(i).gest_in_userf = UU: Next
    End Function
    'evenement des checkbox dans la classe
    Private Sub checkB_Change():
        visibilité listB, checkB
        If gest_in_userf = True Then usf.menu_change checkB.Tag, checkB.name, listB, checkB.value
    End Sub
    ' restructuration du menu
    Private Sub visibilité(liste As Object, check As Object)
        Dim elem, i&
        If checkB.value = True Then
            For Each elem In mesboutons: elem.value = elem.name = checkB.name: Next
            For Each elem In listt: elem.Height = IIf(elem.name <> liste.name, 0, 60): elem.Visible = IIf(elem.name <> liste.name, False, True): Next
        Else
            liste.Height = 0: liste.Visible = False
        End If
        For i = 2 To UBound(controles): controles(i).Top = controles(i - 1).Top + controles(i - 1).Height: Next
    End Sub
    ' evenement des listboxs dans la classe
    Private Sub ListB_Click()
        listBD.AddItem listB.value
    End Sub
    voila a partir de la des que tu affichera ton userform le menu sera present

    comme je n'ai aucune idée du comment tu remplie ou la source de tes listbox dans le menu j'ai fait en sorte que le remplissage soit dynamique aussi au click sur un checkbox en gros tu click sur le check 0 tu rempli la listbox0 et ainsi de suite jusqu'a 10 dans cete exemple

    pour cela la gestion dans la classe aurait été une vrai galere
    j'ai donc eu l'idée de renvoyer l'evenement menu(general) dans le userform se sera certainement plus facile pour toi
    j'ai donc créé un PSEUDO EVENEMENT dans le userform qui est exité par l'evenement du checkbox cliqué
    en gros un seul evenement menu_change pour tout les checkboxs( c'est le principe et vocation d'une classe control)
    sauf que la pour plus de facilité de gestion pour toi je deporte cet evenement dans le userform


    tu va donc ajouter ce code dans le 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
    Sub menu_change(ByVal index As Long, ByVal name As String, ByVal liste As Object, ByVal value As Boolean)
        If value = True Then Me.Caption = Me.name & "  " & name & " " & value & "; listbox active :" & liste.name Else Me.Caption = Me.name
        'MsgBox value & vbCrLf & liste.name
        Select Case name
        Case "menu0":
            'on rempli la liste juste en dessous
            With Me.Controls("listB0"): .List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9): End With
     
        Case "menu1":
            'on rempli la liste juste en dessous
            With Me.Controls("listB1"): .Clear: .List = Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100): End With
        Case "menu2"
            'on rempli la liste juste en dessous
            With Me.Controls("listB2"): .Clear: .List = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"): End With
        Case 4:
        Case 5:
        Case 6:
        Case 7:
        Case 8:
        Case 9:
        End Select
    End Sub
    les arguments sont: index ,name ,liste,value tu peux faire ce que tu veux avec ses retours
    inex c'est l'index du menu 0,1,2,3,etc...
    name c'est le nom du chexckbox
    liste c'est la listebox qui va en couple avec ce checkbox
    value c'est la valeur du checkbox (true/false)
    parti de la tu peux gérer ton menu de toute les maniere que ce soit

    Revenons a notre userform
    l'apel de la classe et construction du menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cl.initiate_menu Me, mesItems, listedroite, 10, 20, True
    le premier argument c'est l'object userform lui meme (Me)
    le 2d argument c'est les array juste au dessus contenant les titres des futurs checkbox constituant le menu
    le 3eme argument c'est la listbox a droite dans l'userform je l'ai appelé 'listedroite appelle la comme tu veux bien sur
    le 4eme et 5 eme c'est le top et left du menu pour le placer ou tu veux
    et enfin le 6 eme argument (true/false) c'est si tu veux gerer ton menu dans le userform ou pas
    il est donc a true car j'ai fait le pseudo evenement
    si tu met false il te faudra coder son evenement dans le "Private Sub checkB_Change()" de la classe
    voila une maniere de faire parmi tant d'autres pour ajouter des controles et gerer leur evenement dynamiquement
    elle n'est pas trop compliquée tu devrais t'en sortir facilement (j'ai fait en sorte que )
    demonstration
    Nom : demo.gif
Affichages : 1233
Taille : 147,6 Ko

    si tu comprends pas quelque chose demande n'hesite pas
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2017, 20h20
  2. [XL-2010] Créer Textbox dans Userform via procédure externe
    Par papy_l dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/02/2015, 16h49
  3. Réponses: 0
    Dernier message: 22/04/2013, 14h01
  4. [XL-2007] Checkbox dans userform
    Par Ziwipeak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/09/2012, 18h44
  5. Comment créer un GroupBox contenant une CheckBox dans le Header ?
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 17/04/2009, 17h43

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