1 pièce(s) jointe(s)
Gestion des checkboxes entre elles
Bonjour à tous,
Je me permets de vous solliciter car j’ai un problème que je n’arrive pas à résoudre. Dans un fichier Excel qui gère une multitude de données dans un tableau structuré, j’ai réalisé une petite macro qui gère l’affichage des colonnes en passant par une Userform contenant des checkboxes. Jusque-là, tout fonctionne. Dans la Userform, j’ai créé des frames par catégorie de données afin de structurer visuellement la userform en fonction des besoins des utilisateurs. Afin d’éviter aux utilisateurs de coché ou décoché toutes les checkboxes d'une catégorie (Frame), j’ai ajouté une checkbox dans chaque frame pour gérer les checkboxes de la catégorie en question. Et j’aimerais que la valeur de la checkbox qui gère la catégorie se mette à jour en fonction de la valeur des autres checkboxes (Si elles sont toutes cochées, elle se coche. S'il y en a une qui est décochée, elle se décoche).
J’ai créé un fichier très simplifié pour exposé mon problème.
Dans la userform, il y’a 3 frames (qui ont la même fonction mais c’est pour l’exemple) qui résume le cheminement de ma réflexion.
Dans le frame « Problème 1 », la checkbox qui est ajoutée pour gérer les autres fonctionne mais ne se met pas à jour.
Dans le frame « Problème 2 », elle se met à jour mais ne gère pas les autres.
Dans le frame « Problème 3 », qui est la conclusion des deux autres frames, ne fonctionne pas et en plus je ne comprends pas leurs réactions. Mon code me parait pourtant logique mais quelque chose m’échappe.
Pièce jointe 403049
Si quelqu’un à une solution ou des explications, je suis preneur !
Je vous remercie par avance.
Johann.
1 pièce(s) jointe(s)
re modele avec module classe
re
voila un exemple avec la gestion des checkboxs dans un module classe
dans un userform 3 frames comme dans le tiens
dans chaques frame 4 checkboxs
dans le nom du 4 eme checkbox de chaques frames il faut qu'il y est le mot "general"
alors voila le code dans le userform
Code:
1 2 3 4
| Dim cl As New Classecheckbox
Private Sub UserForm_Activate()
cl.initiate Me
End Sub |
et le module classe s'appelle "Classecheckbox"
le code dans ce module classe
Code:
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
|
Option Explicit
Public WithEvents check As MSForms.CheckBox
Dim cls() As New Classecheckbox
Public Function initiate(usf)
Dim Ctrl As Object, fra As Object, a&
For Each fra In usf.Controls
If TypeName(fra) = "Frame" Then
For Each Ctrl In fra.Controls
'Debug.Print ctrl.Name
a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).check = Ctrl:
Next
End If
Next
End Function
Private Sub check_Click()
Dim i&, x&
If check.Parent.ActiveControl.Name = check.Name And Not check.Name Like "*general*" Then
For i = 0 To 2
If check.Parent.Controls(i).Value = True Then x = x + 1
Next
If x = 3 Then check.Parent.Controls(3).Value = True Else check.Parent.Controls(3).Value = False
Else
If check.Name = check.Parent.ActiveControl.Name Then
For i = 0 To 2
check.Parent.Controls(i).Value = check.Value
Next
End If
End If
End Sub |
demonstration
Pièce jointe 403111