Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Case à cocher

Hugues1976

XLDnaute Nouveau
bonjour.

J'ai des checkbox en Active X dans une feuille XLXS. Il y a 3 options possibles, soit oui/non/Ne sais pas.

Je veux qu'il n'y ai qu'une seule option possible. Donc si je coche oui, et qu'ensuite je coche non, que le oui se décoche automatiquement.

Je suis ouvert au suggestion s'il y a un moyen plus simple.
Bonjour.

voici mon code qui ne fonctionne pas.. C'est mon point de départ.
J'ai plus ou moins 80 lignes dans lequel il y a 3 options.

VB:
Private Sub CheckBox1_Click()

End Sub

Private Sub CheckBox2_Click()

End Sub
Private Sub Validation()

If Me.CheckBox1_Click = True Then
    Me.CheckBox2_Click.Value = False
End If

If Me.CheckBox2_Click = True Then
    Me.CheckBox1_Click.Value = False
End Sub

Private Sub CheckBox3_Click()

End Sub
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour Hugues1976

Le plus simple serait d'utiliser des OptionButtons, au moins tu n'as qu'un choix possible : si l'un est coché, tu ne peux en cocher un autre.

Bonne fin de journée à toutes & à tous

@+ Eric c
 

Pièces jointes

  • Hugues.xlsm
    28.6 KB · Affichages: 4

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Tu n'as pas les bonnes instructions de tes cases modifie comme ça ..c'est mieux
VB:
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
CheckBox2.Value = False
CheckBox3.Value = False
End If
End Sub

Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
CheckBox1.Value = False
CheckBox3.Value = False
End If
End Sub

Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
CheckBox1.Value = False
CheckBox2.Value = False
End If
End Sub
je te joins l'exemple
 

Pièces jointes

  • CaC.xlsm
    25.9 KB · Affichages: 6
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonsoir
un petit exemple pour transformer des checkbox en optionbutton

VB:
Private Sub CheckBox1_Change(): checkingbox CheckBox1: End Sub
Private Sub CheckBox2_Change(): checkingbox CheckBox2: End Sub
Private Sub CheckBox3_Change(): checkingbox CheckBox3: End Sub


Sub checkingbox(check As Object)
    Dim chk As msforms.CheckBox
    If check.Value = True Then
        For i = 1 To 3
            Set chk = ActiveSheet.OLEObjects("CheckBox" & i).Object
            If chk.Name <> check.Name Then chk.Value = False
        Next
    End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonsoir Eric C
oh c'est juste pour m'amuser a m'interposer dans les events
bien entendu mieux vaut utiliser les controls adéquats
après si tu y tiens il faut aussi que ça serve a autre chose que tu visuel
VB:
Private Sub CheckBox1_Change(): checkingbox checkbox1: End Sub
Private Sub CheckBox2_Change(): checkingbox CheckBox2: End Sub
Private Sub CheckBox3_Change(): checkingbox CheckBox3: End Sub


Sub checkingbox(check As Object)
    Dim chk As msforms.CheckBox
    If check.Value = True Then
        For i = 1 To 3
            Set chk = ActiveSheet.OLEObjects("CheckBox" & i).Object
            If chk.Name <> check.Name Then chk.Value = False
        Next
        
        Select Case check.Name
        Case "CheckBox1": 'faire ceci ou cela
        Case "CheckBox2": 'faire ceci ou cela
        Case "CheckBox3": 'faire ceci ou cela
        End Select
      
    End If
End Sub
 

Eric C

XLDnaute Barbatruc
Je regarde après la soirée télé avec mon épouse (sinon ça ne va pas le faire... lol). De plus, je vais voir pour le transcrire avec un projet UserForm, ça doit pouvoir se faire, je pense.
Bonne soirée à toi ainsi qu'à toutes & à tous
Eric c
 

Hugues1976

XLDnaute Nouveau
Allo. Merci beaucoup.
JE vais avoir +- 80 groupes de 3 cases. Est-ce que tu crois qu'il serait possible d'inclure une variable dans le nom de la checkbox. Ainsi je pourrais définir mes plages de checkbox sans avoir à changer le nom.

Exemple for t= 1 to 3 (checkbox 1 à 3)
for t = 4 à 6 (checkbox 4 à 6)
for t = 7 à 9 (checkbox 7 à 9)

Je ne sais pas si c'est clair.

Je l'ai fait dans d'autre macro mais je suis débutant alors je me perd vite. MErci

 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir @Hugues1976
JE vais avoir +- 80 groupes de 3 cases. Est-ce que tu crois qu'il serait possible d'inclure une variable dans le nom de la checkbox. Ainsi je pourrais définir mes plages de checkbox sans avoir à changer le nom.
là je crois qu'il va te falloir faire un module classe sinon ca va etre une vrai usine a gaz ton truc

@Eric C
le même pour les checkbox dans le userform
VB:
Private Sub CheckBox1_Click():    checkingUSFbox CheckBox1: End Sub
Private Sub CheckBox2_Click():    checkingUSFbox CheckBox2: End Sub
Private Sub CheckBox3_Click():    checkingUSFbox CheckBox3: End Sub

Sub checkingUSFbox(check As msforms.CheckBox)
    Dim chk As msforms.CheckBox, i&
    If check.Value = True Then
        For i = 1 To 3
            Set chk = Me.Controls("CheckBox" & i)
            If chk.Name <> check.Name Then chk.Value = False
        Next

        Select Case check.Name
        Case "CheckBox1":    'faire ceci ou cela
        Case "CheckBox2":    'faire ceci ou cela
        Case "CheckBox3":    'faire ceci ou cela
        End Select

    End If
End Sub

@Hugues1976 je m'occupe de faire un exemple avec un module classe
 

patricktoulon

XLDnaute Barbatruc
re
Alors allons y pour un module classe
je met des series de 3 checkboxs dans ma feuille


sur chaque checkbox je leur attribut le nom d'un groupe (voir capture
chaque checkbox d'une même série portera le même groupe
groupe1 , groupe2 ,etc



nous y voila je vais ajouter un bouton pour classer les checkbox (voir capture 1)

l'events bouton dans la feuille et en meme temps j'instancie une classe maitresse de toute les autres qui vont suivre dans init du module classe

VB:
Dim cls As New ClassCheck
Private Sub CommandButton1_Click()
cls.init Sheets("Feuil1")
End Sub

bon voilà vous l'aurez compris mon module classe s'appelle "ClassCheck"

le code dans le module classe maintenant
il contient la sub init qui va classer les checkbox et l'event change de substitution
VB:
Public WithEvents checkB As MSForms.CheckBox
Dim cl() As New ClassCheck
Public f As Worksheet
Function init(feuille)    'classement des controls checkbox
    Dim a&
    For Each obj In feuille.OLEObjects
        If TypeName(obj.Object) = "CheckBox" Then a = a + 1: ReDim Preserve cl(1 To a): Set cl(a).checkB = obj.Object: Set cl(a).f = feuille
    Next
End Function

Private Sub CheckB_Change()
    Dim obj As OLEObject
    If checkB.Value = True Then
        For Each obj In f.OLEObjects
            If TypeName(obj.Object) = "CheckBox" Then
                               If obj.Name <> checkB.Name Then If obj.Object.GroupName = checkB.GroupName Then obj.Object.Value = False
            End If
        Next

    End If
End Sub
bien voila essayons voir démonstration avec 4 serie de 3 checkboxs



et voila
 

Pièces jointes

  • classe checkbox feuille.xlsm
    47.4 KB · Affichages: 9

Discussions similaires

Réponses
13
Affichages
464
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…