Case à cocher Excel (non-booléenne)

Résolu/Fermé
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018 - 18 avril 2018 à 14:04
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018 - 19 avril 2018 à 14:28
Bonjour,

Je dois effectuer un travail sur Excel qui nécessite des cases à cocher avec macro mais qui présentent plus de deux état. Je m'explique : j'aimerai que quand l'on clique une fois dessus, la case soit cocher normalement (par exemple) et que en re-cliquant dessus, plutôt que de retourner à son état de base, celle-ci affiche un point, ou une croix, etc... puis, en cliquant une troisième fois, celle-ci soit décochée.

Merci d'avance !
A voir également:

5 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
18 avril 2018 à 19:07
Bonjour,

si tu prends une case à cocher ActiveX tu peux mettre sa propriété TripleState à True.
Tu auras : non coché, coché grisé, coché.
eric
1
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
19 avril 2018 à 09:15
Merci pour ton aide. Ca m'a beaucoup avancé mais malgré cela je trouve que la différence entre les 3 états n'est pas assez flagrante. J'ai donc essayé de changer la police mais je bloque maintenant sur un autre problème. (je le poste à la suite)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 avril 2018 à 16:53
Une case à cocher est booléenne et donc ne peut présenter que 2 états: vrai- faux

on peut toujours tenter avec un textbox de la forme d'un checkbox ou peut-^tre avec la linkedcell du checkbox
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
19 avril 2018 à 09:14
Merci pour ton aide ! mais je vais essayer avec la méthode d'Eric.
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
Modifié le 19 avril 2018 à 10:28
Re-bonjour à tous !

Suite à la réponse d'Eric, j'ai pu trouver une checkbox à trois états mais je trouve que ceux-ci ne sont pas assez différenciable. En effet le but est d'avoir un changement qui soit plus visible qu'une croix grisé de façon à ce que l'opérateur puisse voir la différence assez facilement. J'ai donc pensé à une nouvelle chose c'est de garder l'idée de la TripleState checkbox mais de changer la police en fonction de la valeur que prend la checkbox. Seulement voilà : j'ai trouvé pas mal de chose sur internet qui m'ont fait arriver ici :

__________________________________________________________
Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then
With ActiveSheet.CheckBox1
.Font.Name = "Times New Roman"
.Font.Size = 14

ElseIf CheckBox1.Value = False Then
With ActiveSheet.CheckBox1
.Font.Name = "Calibri"
.Font.Size = 11
End With

ElseIf CheckBox1.Value = Null Then

With ActiveSheet.CheckBox1
.Font.Name = "Calibri"
.Font.Size = 24
End With

End If

End Sub
__________________________________________________________

Malheureusement, la valeur 'Null' (case grisé) n'est pas reconnu et la police s'affiche de la même manière que dans le cas de la case décoché.

J'ai déjà essayé :
- de simplement laisser "Else" dans la 3ème condition
- de mettre la valeur différent de 'True' et différente de 'False' dans la 3ème condition

Voilà voilà ! C'est la première fois que je fais du vba c'est donc un mix de ce que j'ai trouvé sur internet et que j'ai pensé juste.
Merci pour votre aide !

A bientôt!
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
19 avril 2018 à 10:26
Je viens de tomber sur ça :
________________________________________
Private Sub CheckBox1_Change()
If IsNull(CheckBox1.Value) Then
CheckBox1.Caption = "Value is Null"
ElseIf CheckBox1.Value = False Then
CheckBox1.Caption = "Value is False"
ElseIf CheckBox1.Value = True Then
CheckBox1.Caption = "Value is True"
End If
End Sub _______________________________

J'ai donc remplacer par l'expression "IsNull()" mais rien ne change.
0
Jauster Messages postés 126 Date d'inscription jeudi 7 décembre 2017 Statut Membre Dernière intervention 31 août 2018 40
Modifié le 19 avril 2018 à 10:46
Hello,
Ayant déjà bien avancé dans l'apprentissage du VBA je ne suis aussi qu'un débutant.
Cette histoire de triple state checkbox est un peu compliqué pour moi, mais je propose on ne sait jamais. Au lieu d'utiliser l'event "click" de la checkbox, pourquoi ne pas utiliser l'event "Change" :

Private Sub CheckBox1_Change()

End Sub


Si j'ai bien compris son fonctionnement, le code se lancera au changement de statut de la checkbox
0
Jauster Messages postés 126 Date d'inscription jeudi 7 décembre 2017 Statut Membre Dernière intervention 31 août 2018 40
Modifié le 19 avril 2018 à 10:53
Je viens de voir, et je pense que tu n'as pas fait attention aussi puisque tu ne le précises pas, mais un coup tu utilises l'event Click et un coup l'event Change. As-tu essayé avec :

Private Sub CheckBox1_Change()
If IsNull(CheckBox1.Value) Then 
  With ActiveSheet.CheckBox1 
    .Font.Name = "Calibri" 
    .Font.Size = 24 
  End With

ElseIf CheckBox1.Value = False Then 
  With ActiveSheet.CheckBox1 
    .Font.Name = "Calibri" 
    .Font.Size = 11 
  End With 

ElseIf CheckBox1.Value = True Then 
  With ActiveSheet.CheckBox1 
    .Font.Name = "Times New Roman" 
    .Font.Size = 14
  End With 

End If 

End Sub


Il te manque un End With d'ailleurs. Le premier.

EDIT : J'ai changé = Null par IsNull
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
19 avril 2018 à 11:12
Effectivement j'ai retirer le premier End With en modifiant le programme pour le poster ici mais il apparait bien sur le code.
J'ai essayer ton code et... CA MARCHE ! Merci énormément j'y suis depuis 3heures et effectivement il fallait changer d'event ^^
Merci encore, bonne journée !
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
19 avril 2018 à 11:13
Merci à tous pour vos réponses, j'ai finalement réussi avec l'aide de Jauster !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
19 avril 2018 à 13:11
Bonjour,

perso je trouve bizarre de jouer sur la taille du texte.
Pourquoi ne pas changer la couleur du texte ou du fond ?
eric
0
bighaze Messages postés 9 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 9 novembre 2018
Modifié le 19 avril 2018 à 14:29
Re-bonjour,
En fait j'ai déjà un code couleur défini pour le fond et/ou le cadre puisque je dois définir des niveaux de maintenance sur certaines pièces à partir du schéma d'un montage hydraulique. Le problème est donc que je ne peux pas vraiment changer le fond et le cadre puisque ceux-ci sont de couleur prédéfini.
Je vais bien sûr changer la couleur du texte et pas seulement modifié la taille (ce que j'ai envoyé comme partie de code n'était qu'une ébauche pour savoir si c'était réalisable et si je m'engageais sur cette voie là.)

Bonne journée

Julien
0