Ayant remis à plat un projet, et pour suivre le bon conseil de TootFatBoys, je créé cette nouvelle discussion.
J'ai mis en place ce code qui permet de désactiver toutes les CheckBox de mon formulaire si il y en a une de cochée, hors, j'ai dix CheckBox à gérer.
Dois-je répéter ce code pour les dix ou existe t-il une manière de le simplifier pour qu'il s'applique si on clique sur une des dix CheckBox ?
Peut-être faut-il passer par un module... Je ne sais pas.
Merci par avance pour votre aide
VB:
Private Sub Chk_1_Click()
Dim ctrl As Control
'Si la CheckBox 1 est cochée
If Chk_1.Value = True Then
'alors toutes les CheckBox sont désactivées
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
ctrl.Enabled = False
End If
Next ctrl
'Sinon elles restent activées
Else
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
ctrl.Enabled = True
End If
Next ctrl
End If
End Sub
Histoire de prolonger cette discussion amicale au bistrot d'XLD, je reviens sur la classe de @vgendron et j'ai 2 remarques:
La propriété de la classe Public usf As Object ne sert à mon avis à rien et peut être supprimée (et donc aussi Set usf = uf)
Je me demande aussi pourquoi ctrl.GroupName = "".
Ça dézingue le GroupName natif de la CheckBox.
Alors oui, toutes ont le même GroupName = "" et donc ça fonctionne, mais originellement @NONO14 a mis GroupName = "1"
Puis-je proposer ce code (Edit: légèrement modifié) pour la classe cCheckBox ?
VB:
Public WithEvents ChkBoxChoix As msforms.CheckBox 'pour les checkbox
Dim clchk() As New cCheckBox
'Fonction qui parcourt les ctrls du USF et s'il s'agit d'un checkbox, affecte les méthodes et propriétés définies dans cette classe
Function initiateChk(uf)
For Each ctrl In uf.Controls
If TypeOf ctrl Is msforms.CheckBox Then
If Not Len(ctrl.GroupName) = 0 Then
i = i + 1: ReDim Preserve clchk(1 To i): Set clchk(i).ChkBoxChoix = ctrl
End If
End If
Next ctrl
End Function
Private Sub ChkBoxChoix_click()
CheckBoxExclusive
End Sub
tu viens en fait de répondre à une question que je me posais depuis un moment (sans pour autant aller au bout de la reflexion puisque le code me donnait satisfaction)
la classe est issue originellement de patricktoulon
je l'ai adapté pour que le traitement du textbox soit différent selon son tag..
et donc oui.. la partie .tag (ou .groupname dans le cas présent) qui remet à "" est à supprimer..
Je pense que cette modif lors de l'initiate n'est valide que jusqu'à ce que le formulaire soit relancé..
Maintenant il n'y a plus que 2 boutons, entrée et sortie. L'agent doit pointer à chaque arrivée et à chaque départ. Il clique sur un des 2 boutons et l'heure système est prise en compte. Si besoin je peux remettre mon classeur.
hello
je pense qu'il faudrait que tu postes la dernière version de ton fichier avec le choix que tu as fait (optionbouton ou checkbox)
PS; le code que tu m'attribues vient de Dudu2..
moi, j'ai juste modifié en ajoutant une classe cChkbox pour faire un appel "unique" à la fonction de dudu2
ce qui évite tous les "chkboxX_Click"
Re
Oui un classeur avec dernière mouture et surtout explications de ce que tu as et ce que tu veux !
en fonction du Userform utilisé;
qui fait quoi et comment doit il le faire !
("Maintenant il n'y a plus que 2 boutons, entrée et sortie. L'agent doit pointer à chaque arrivée et à chaque départ. Il clique sur un des 2 boutons et l'heure système est prise en compte")
Re
Regarde ce que j'ai modifié .
Pour ne pas permettre l'effacement ou la modification dans le TextBox Txt_DateJour , j'ai remplacé celui ci par un Label : LBl_DateJour
VB:
Private Sub UserForm_Initialize()
With UfPointage
.LBl_DateJour.Caption = Application.Proper(Format(Date, "dddd dd mmmm yyyy"))
End With
End Sub
Hello
pour simplifier les if checkbox1=true then...
j'ai ajouté une fonction "QuelCheckbox" qui te donne le numéro du checkbox selectionné
et dans le code du bouton valider, un select case
Re
dans cette procédure (simplification)
j'ai supprimé tout les "Unload Me" dans les If Me.CheckBoxX.Value=True
VB:
Private Sub Cmb_Valider_Click()
'Vérifier chaque case à cocher et exécuter une action spécifique
Unload Me '----> placé Ici
If Me.CheckBox1.Value = True Then
Re
Regarde ce que j'ai modifié .
Pour ne pas permettre l'effacement ou la modification dans le TextBox Txt_DateJour , j'ai remplacé celui ci par un Label : LBl_DateJour
VB:
Private Sub UserForm_Initialize()
With UfPointage
.LBl_DateJour.Caption = Application.Proper(Format(Date, "dddd dd mmmm yyyy"))
End With
End Sub
Hello
pour simplifier les if checkbox1=true then...
j'ai ajouté une fonction "QuelCheckbox" qui te donne le numéro du checkbox selectionné
et dans le code du bouton valider, un select case
Re
dans cette procédure (simplification)
j'ai supprimé tout les "Unload Me" dans les If Me.CheckBoxX.Value=True
VB:
Private Sub Cmb_Valider_Click()
'Vérifier chaque case à cocher et exécuter une action spécifique
Unload Me '----> placé Ici
If Me.CheckBox1.Value = True Then
hello
je pense qu'il faudrait que tu postes la dernière version de ton fichier avec le choix que tu as fait (optionbouton ou checkbox)
PS; le code que tu m'attribues vient de Dudu2..
moi, j'ai juste modifié en ajoutant une classe cChkbox pour faire un appel "unique" à la fonction de dudu2
ce qui évite tous les "chkboxX_Click"
le (ou les) unload me doivent intervenir AVANT l'affichage du formulaire GestTemps car tu l'affiches en modal
si dans ma proposition avec select case, tu es sur qu'il n'y a pas de elsecase ET que dans TOUS les cases, tu as besoin de fermer le formulaire, alors, tu peux mettre un "unload me" unique AVANT le select case
[aparté en passant] @NONO14
Juste en passant, quand tu y penseras, fais moi signe dans ton autre fil
(on est bientôt dimanche )
Cette fois, je suis plus explicite que l'autre jour [/aparté en passant]
[aparté en passant] @NONO14
Juste en passant, quand tu y penseras, fais moi signe dans ton autre fil
(on est bientôt dimanche )
Cette fois, je suis plus explicite que l'autre jour [/aparté en passant]
le (ou les) unload me doivent intervenir AVANT l'affichage du formulaire GestTemps car tu l'affiches en modal
si dans ma proposition avec select case, tu es sur qu'il n'y a pas de elsecase ET que dans TOUS les cases, tu as besoin de fermer le formulaire, alors, tu peux mettre un "unload me" unique AVANT le select case