Voici mon problème: J'ai un UserForm2 avec 22 checkbox. Je voudrais qu'en cochant un et un seul quelconque de ces 22 checkbox, la propriété "enable" des 21 autres passe automatiquement à "False". J'espère avoir été suffisamment clair.
Je suppose que c'est un jeu d'enfant pour vous les génies mais pour un nul comme moi, c'est trop. J'en suis encore à oublier les "End if" dans mes codes. Cela en dit long sur mon niveau.
Merci d'avance à toutes les bonnes volontés qui s'intéresseront à ma question. Restant à votre disposition, je vous souhaite une agréable journée malgré la grêve.
Salut,
Hélas en VBA pas de propriété Index pour les contrôle.
Essaie ce petit code.
Seul Problème tu doit faire appelle à cette procédure dans CHAQUE evenement click sur les CheckBox (voir code exemple avec 4 CheckBox)
Private Sub CheckBox1_Click()
Call DisableCheckBox(CheckBox1)
End Sub<hr />
Private Sub CheckBox2_Click()
Call DisableCheckBox(CheckBox2)
End Sub<hr />
Private Sub CheckBox3_Click()
Call DisableCheckBox(CheckBox3)
End Sub<hr />
Private Sub CheckBox4_Click()
Call DisableCheckBox(CheckBox4)
End Sub<hr />
Private Sub DisableCheckBox(ChkSelect As MSForms.CheckBox)
Dim Ctrl As Control
'Pour chaque controle dans le formulaire
For Each Ctrl In Me.Controls
'Si c'est un CheckBox
If TypeOf Ctrl Is MSForms.CheckBox Then
'Et que ce n'est pas celui sur lequel
'on à agit
If Ctrl.Name <> ChkSelect.Name Then
'Enable dépend de la valeur de selection Ctrl.Enabled Not (ChkSelect.Value True)
End If
End If
Next
End Sub , ----
[code.aspx?ID=41455 By Renfield]
Pour faire des controles indexés, au lieu de les appeler Bidule1, Bidule2, Bidule3, etc.... appelle les tous Bidule, et mets leur un index (0,1,2,3,....)
quand tu fais un clic sur l'un d'eux, ça va te faire genre
Public Sub Bidule_Click (Index as integer)
Le "Index" est le numéro du controle sur lequel tu as appuyé.
Il te suffit de faire une boucle sur i de 1 à 22 qui met bidule(i).enabled=false, sauf si i=Index
Re,
Une petite amélioration pour les appels serait
Private Sub CheckBox1_Click()
Call DisableCheckBox(Me.ActiveControl)
End Sub<hr />
Private Sub CheckBox2_Click()
Call DisableCheckBox(Me.ActiveControl)
End Sub<hr />
Private Sub CheckBox3_Click()
Call DisableCheckBox(Me.ActiveControl)
End Sub<hr />
Private Sub CheckBox4_Click()
Call DisableCheckBox(Me.ActiveControl)
End Sub , ----
[code.aspx?ID=41455 By Renfield]
Ah, j'ai cru VB6, j'avais pas vu que c'était en VBA, ben fais comme te le dit jrivet alors >_< (qui a posté en même temps que moi, donc j'avais pas vu son message non plus :p
euh..... et les optionbuttons? ils servent à quoi?
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Je ne sais pas si tu es toujours là. Je viens de tester ton code. J'ai mis Call DisableCheckBox(Me.ActiveControl)
dans Private Sub CheckBox2_Click() et en cochant CheckBox1, je m'attendais à ce que CheckBox2 passe à enable = False. Mais, rien ne se passe. Ai-je mal fait quelquechose?
Et pourquoi, en cliquant sur CheckBox2 après y avoir mis Call DisableCheckBox(Me.ActiveControl)
dans Private Sub CheckBox2_Click(), j'ai un message d'erreur du style "erreur de compilation variable ou procédue attendue et non un module"?