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 :

Comment boucler sur des checkboxes via un module de classe quand ces checkboxes sont sur un userform [XL-365]


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
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut Comment boucler sur des checkboxes via un module de classe quand ces checkboxes sont sur un userform
    Bonjour,
    J'ai une trentaine de checkboxes qui sont positionnées dans un userform et je souhaite faire un code unique pour l'ensemble en mettant en variable le numéro de ces checkboxes. J'ai trouvé une méthode qui est très proche de ce que je veux grâce à une très vieille discussion (2013) dont je vous mets la conclusion ci-dessous. Mon problème pour y arriver vient du fait que mes checkboxes sont contenues sur l'userform et non dans une feuille comme dans l'exemple, et donc je ne sais pas comment déclarer l'userform à la place de la feuille.
    Help please !

    Citation Envoyé par PMO2017 Voir le message
    Bonjour,

    Une piste avec le code suivant basé sur une classe.

    1) créez un module de classe Class1 et copiez 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
    Public WithEvents CheckBoxGroup As MSForms.CheckBox
     
    Private Sub CheckBoxGroup_Click()
    Dim OL As OLEObject
    Dim LB As MSForms.Label
    Dim i&
    Dim myItem$
    '--- Détermine l'ID du CheckBox (les chiffres en final) ---
    For i& = 1 To Len(CheckBoxGroup.Name)
      If IsNumeric(Mid(CheckBoxGroup.Name, i&, 1)) Then
        myItem$ = myItem$ & Mid(CheckBoxGroup.Name, i&, 1)
      End If
    Next i&
    '--- Recherche l'OLEObject correspondant  et l'affecte à une variable object MSForms.Label ---
    Set OL = ActiveSheet.OLEObjects("Label" & myItem$ & "")
    Set LB = OL.Object
    '--- Change le caption et la couleur de fonds en fonction de la coche de la CheckBox ---
    If CheckBoxGroup.Value Then
      LB.Caption = [b1]
      LB.BackColor = RGB(204, 255, 204)
    Else
      LB.Caption = "Merci de valider"
      LB.BackColor = RGB(255, 204, 255)
    End If
     
    '--- On s'amuse avec d'autres propriétés (accessoirement) ---
    LB.WordWrap = False
    LB.AutoSize = True
    End Sub
    2) copiez le code suivant dans la fenêtre de code de ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Activate()
    Call InitializeCheckBoxes(ThisWorkbook.Sheets("test")) 'à adapter par la feuille concernée
    End Sub
     
    Private Sub Workbook_Deactivate()
    Set MyClass = Nothing
    End Sub
    3) copiez le code suivant dans un module Standard
    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
    Public MyClass As Classe1
    Public CollCheckBoxes As Collection
     
    Public Sub InitializeCheckBoxes(Feuille As Worksheet)
    Dim OL As OLEObject
    Set MyClass = Nothing
    '---
    Set CollCheckBoxes = New Collection
    For Each OL In Feuille.OLEObjects
      If TypeOf OL.Object Is MSForms.CheckBox Then
        Set MyClass = New Classe1
        Set MyClass.CheckBoxGroup = OL.Object
        CollCheckBoxes.Add MyClass
      End If
    Next OL
    End Sub
    4) renommez une feuille "test", créez un ActiveX CheckBox1 et un ActiveX Label1.
    Sélectionnez les 2 contrôles, copiez les et collez les plusieurs fois de suite pour en avoir une quantité conséquente.
    Les contrôles sont appariés de manière qu'à chaque CheckBoxX correspond un LabelX.

    5) lancez la procédure "Workbook_Activate" qui est dans ThisWorkBook pour initialiser les contrôles CheckBox

    Je mets le classeur exemple en pièce jointe pour faciliter.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    bonjour,
    un exemple simplissime en pièce jointe.
    A+
    Classe_ChBxUsf.xls

  3. #3
    Membre averti
    Homme Profil pro
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    impeccable, ça marche nickel... et finalement c'est moins compliqué que ce que j'avais trouvé.
    Merci

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

Discussions similaires

  1. [XL-2010] Comment boucler sur un UserForm créé dynamiquement ?
    Par Ravens dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/02/2013, 21h53
  2. comment boucler sur la 1ere image clé
    Par scoubi74 dans le forum Flash
    Réponses: 5
    Dernier message: 14/04/2008, 09h59
  3. Réponses: 1
    Dernier message: 10/02/2008, 20h13
  4. Réponses: 2
    Dernier message: 24/12/2007, 09h53
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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