Peut-on simplifier Sub checkbox1, 2, ..n_click () en checkbox+i?
thomanneca
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai 24 checkbox et j'aimerais simplifier les codes, est-ce possible?
Peut-on simplifier le code qui suit comme tel :
Peut-on intégrer For i = 1 to 24 d'une manière ou d'une autre ?
Merci beaucoup
J'ai 24 checkbox et j'aimerais simplifier les codes, est-ce possible?
Peut-on simplifier le code qui suit comme tel :
Private Sub checkboxi_click()
For i = 1 To 24
If CheckBoxi.Value = True Then
Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = "8"
Else
Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = ""
End If
Next
End Sub
Peut-on intégrer For i = 1 to 24 d'une manière ou d'une autre ?
Merci beaucoup
A voir également:
- Peut-on simplifier Sub checkbox1, 2, ..n_click () en checkbox+i?
- Supercopier 2 - Télécharger - Gestion de fichiers
- Peut on avoir 2 comptes instagram sur le même téléphone - Guide
- 2 ecran pc - Guide
- I love pdf avis ✓ - Forum PDF
- Ou i ou a a ✓ - Forum Musique / Radio / Clip
2 réponses
Bonjour,
exemple: a adapter pour les 24 checkbox's
exemple: a adapter pour les 24 checkbox's
Public Num As Byte
Private Sub CheckBox1_Click()
Num = 1
Call lecture_Checkbox
End Sub
Private Sub CheckBox2_Click()
Num = 2
Call lecture_Checkbox
End Sub
Private Sub CheckBox3_Click()
Num = 3
Call lecture_Checkbox
End Sub
Private Sub CheckBox4_Click()
Num = 4
Call lecture_Checkbox
End Sub
Sub lecture_Checkbox()
For i = 1 To 4
If Me("CheckBox" & i) Then
Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = 8
Else
Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = ""
End If
Next i
End Sub
Salut,
Il existe deux solutions pour ton cas.
La première consiste à placer un bouton, l'événement déclencheur sera alors un clic sur le bouton et non plus un clic sur un CheckBox. L'effet escompté n'est malheureusement plus le même.
Pour cela, le code du CommandButton est :
Cependant, ce code ne réagira pas au clic sur les CheckBox.
Pour faire exactement ce que tu souhaites, il te faut utiliser une classe, grâce aux modules de classe VBA.
Je suis parti de cette astuce de Lermite222.
Il te faut :
- 1 UserForm contenant 24 CheckBox,
- Les propriétés Name de tes 24 CheckBox doivent être de la forme CheckBox1, ..., CheckBox12, ..., CheckBox21, etc...
- 1 Module standard,
- 1 Module de Classe appelé Classe1
Les différents codes sont :
Dans le module standard :
Dans le Module de Classe (appelé Classe1) :
Dans le module de l'UserForm :
Ne te restes plus qu'à tester.
La "simplification" ici réside dans le fait que tu ne doive plus multiplier les événements.
Tu dis...
Edit : J'ai oublié de prendre en compte la ComboBox1..... Pfff... Je reviens
Edit2 : Codes modifiés. Merci de tester en réel.
Cordialement,
Franck
Il existe deux solutions pour ton cas.
La première consiste à placer un bouton, l'événement déclencheur sera alors un clic sur le bouton et non plus un clic sur un CheckBox. L'effet escompté n'est malheureusement plus le même.
Pour cela, le code du CommandButton est :
Private Sub CommandButton1_Click() Dim i As Byte For i = 1 To 24 If Me.("CheckBox" & i) Then Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = 8 Else Range(Range("numcentrale").Cells(ComboBox1.ListIndex + 1, 1).Address).Offset(0, i + 1).Value = "" End If Next i End Sub
Cependant, ce code ne réagira pas au clic sur les CheckBox.
Pour faire exactement ce que tu souhaites, il te faut utiliser une classe, grâce aux modules de classe VBA.
Je suis parti de cette astuce de Lermite222.
Il te faut :
- 1 UserForm contenant 24 CheckBox,
- Les propriétés Name de tes 24 CheckBox doivent être de la forme CheckBox1, ..., CheckBox12, ..., CheckBox21, etc...
- 1 Module standard,
- 1 Module de Classe appelé Classe1
Les différents codes sont :
Dans le module standard :
Option Explicit Public CollectC As Collection Public intCombo As Integer Public Sub InitCheck(Usf As UserForm) Dim Ctrl As Control, i As Byte Dim CO As Classe1 Set CO = Nothing Set CollectC = New Collection For i = 1 To 5 Set Ctrl = Usf.Controls("CheckBox" & i) Set CO = New Classe1 Set CO.CheckBoxGroup = Ctrl CollectC.Add CO Next i End Sub
Dans le Module de Classe (appelé Classe1) :
Option Explicit Public WithEvents CheckBoxGroup As MSForms.CheckBox 'Evenement Click sur les CheckBox. Private Sub CheckBoxGroup_Click() If CheckBoxGroup.Value Then Range(Range("numcentrale").Cells(intCombo + 1, 1).Address).Offset(0, CInt(Right(CheckBoxGroup.Name, 1)) + 1).Value = 8 Else Range(Range("numcentrale").Cells(intCombo + 1, 1).Address).Offset(0, CInt(Right(CheckBoxGroup.Name, 1)) + 1).Value = "" End If End Sub
Dans le module de l'UserForm :
Option Explicit Private Sub ComboBox1_Change() If ComboBox1 <> "" Then intCombo = CInt(ComboBox1.ListIndex) Else intCombo = 0 End Sub Private Sub UserForm_Initialize() 'Remplissage de la Combobox 'code de remplissage à placer ici InitCheck Me End Sub
Ne te restes plus qu'à tester.
La "simplification" ici réside dans le fait que tu ne doive plus multiplier les événements.
Tu dis...
Edit : J'ai oublié de prendre en compte la ComboBox1..... Pfff... Je reviens
Edit2 : Codes modifiés. Merci de tester en réel.
Cordialement,
Franck
Pourquoi ne pas utiliser ta variable Num?
Comme ceci :
Ou plus simple encore :
C'etait mon idee de depart, et j'ai ete merturbe par le code avec la boucle ce qui fait que Num ne sert a rien avec une boucle et la boucle ne sert a rien si nous utilisons Num comme dans votre exemple
On peut se tutoyer non? Depuis le temps...
J'aime bien ton mot "merturber". Je vais m'en resservir, il est très expressif.
merturber: perturber puissance au moins 100, tellement c'est "destabilisant"
A voir aussi si représente bien l'adresse d'un Range... Mais là, il faudrait que l'auteur revienne...