Petit voyant rouge ou vert avce VBA

perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011 - 24 nov. 2011 à 09:31
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 - 26 nov. 2011 à 10:57
Bonjour,
Je crée une check list avec des CheckBox et je souhaiterai mettre juste un marqueur à coté des cases à cocher (petit voyant rouge si non coché ou vert si coché).

Est ce possible et de quelle manière?

Merci d'avance

23 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 10:14
Bonjour,
Une checkbox est déjà dotée d'une coche (si cochée) ou non !
Pourquoi y ajouter une "bébelle" de plus "à côté" ?
Mais si tu y tiens et que tu es prêt à alourdir ton appli, rien ne t'empêche d'ajouter un mini label carré sans aucun caption à côté de chaque checkbox et de jouer avec son backcolor !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 10:18
L'intérêt est surtotu visuel. Grâce à cela je voulais que l'utilisateur balaye du regard l'userform et voit ce qu'il lui manque à faire. D'où l'intérêt de faire ça.

Je vais essayer dejouer avec le backcolor.

Merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 10:22
et voit ce qu'il lui manque à faire


A faire ?

A quoi et comment utilises-tu tes checkboxes ? Leur vocation est de choisir ce que l'on veut, pas de constater ce qui reste ou non à faire !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 10:30
La check box me sert d'indicateur. Par exemple cette tache 1 est accomplie donc je coche la checkbox.

Je veux mettre un voyant lumineux vert si c'est accomplie et rouge si c'est non accomplie.

J'utilise des checkbox car j'ai 11 userforms où à chaque fois je dois indiquer si les tâches sont réalisées ( donc pour chaque userform j'utilise entre 2 et 10 userform).

L'intérêt de tout ça et de réunir toutes les taches sur userform récapitulatif et de lier les checkbox à d'autres checkbox afin d'indiquer à l'utilisateur ce qu'il lui reste à faire.

J'ai l'idée et la je patauge pour le faire mais je vais y arriver.

Après si tu as des idées plus sympas pour représenter cela je suis preneur.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 10:35
Ouais !
Là tu patauges réellement pour rien, mais tu t'en vas directement vers l'opposé des vocations !
Et puis : voyons donc : quid si l'utilisateur coche lui-même, alors que la tâche n'a pas été accomplie ?
Qui (ou quoi) d'ailleurs, sait qu'une tâche a été accomplie ?
Je suis persuadé que tu as là principalement un souci de conception de ton appli.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 10:38
L'utilisateur coche et si un autre utilisateur vientil peut voir ce qui a été fait ou modifier avant.

Je ne sais pas cela me semble correct, non?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 10:45
C'est donc la seule volonté de l'un (et du coup de l'autre, qui peut s'amuser à décocher, y compris par erreur) !
Dangereux ! Very dangerous !
Je te conseille dans ce cas deux listboxes. Appelons-les listA et ListB
Dans listA : les tâches restant à accomplir (toutes au départ)
Dans listB : celles restant à accomplir (vide au départ)
Au click sur un élément de listA : inscription dans listB et effacement de cet élément dans listA
Et les utilisateurs savent au premier coup d'oeil ce qui est fait et ce qui reste à faire !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 10:49
Le problème reste identique si l'un ou l'autre décoche..
Comment puis je appliquer cela à un userform?

Merci de m'aider en tout cas
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 11:06
Le problème reste identique si l'un ou l'autre décoche..


Pas du tout !

Regarde !:
Sur un userform : un bouton de commande (qui n'est là que pour remplir la listbox1 et donc essayer) et deux listbox : listbox1 et listbox2

et ce code (àç copier/coller)
Private Sub CommandButton1_Click()
  For i = 1 To 10
    ListBox1.AddItem "trâche " & i
  Next
End Sub

Private Sub ListBox1_Click()
  Dim toto As Integer
  toto = ListBox1.ListIndex
  ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
  ListBox1.ListIndex = -1
  ListBox1.RemoveIteem (toto)
End Sub


Lance : clique sur le bouton de command (pour avoir des élément dans la listbox1)

Clique maintenant sur un élément de ton choix dans listbox1 et regarde.
Et aucun utilisateur ne pourra "revenir" en arrière

Tu peux même assortir, si tu le veux, la suppression (au click) d'un message de confirmation.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 11:22
Bon j'avoue que c'est pas mal!!
Mais c'est pas ce que je veux

Tu as une adresse mail pour que je t'envoie mon fichier et tu comprendras desuite ce que je veux faire. Enfin si tu veux
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 11:33
Non (je ne le souhaite pas).
Ici, tout se fait au vu et su de tous (c'est le principe d'un forum)
Tu dois être capable d'exposer avec précision et clarté les tenants et aboutissants, ainsi que, si elles existent, les raisons de ta conception.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 11:45
Ok ok merci de me le rappeler et je vais me plier aux règles!

En faite je fais un ficheir qui permet de faire une interface dans la gestion de documents.

Exemple j'ai besoin de récupérer et ranger le document dans tel répertoire. J'ai donc créer des userform avec boutons qui permettent l'accès direct à l'emplacement dans le repertoire (Je débute en VBA pour info...).

Jusqu'ici pas de problème et je voulais mettre un indicateur visuel pour indiquer à l'utilisateur si le dossier a déjà a était classé. Après je sais que l'erreur est possible mais bon...

Après je voulais créer un userform qui récupère toutes les infos en indiquant si tel ou tel document a était archivé.

J'espère avoir était plus clair?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 11:54
Hé bien ===>>

ce que je t'ai montré avec les deux listboxes fait à la fois le point 1 et le point 2 à lui tout seul, dès lors que tu as rempli la première listbox.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 17:52
Bon voila ce que j'ai fait c'est pas beau mais au moins je l'ai fait tout seul . J'ai une autre question comment puis je faire pour enregistrer les changements si j'ai coché ou pas. Pour que quand je réutilise le fichier je puisse voir les modifications??

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
CheckBox1.BackColor = vbGreen
CheckBox1.Caption = "Complet"
Else
CheckBox1.BackColor = vbWhite
CheckBox1.Caption = "Complet"
End If

End Sub


Private Sub CheckBox7_Click()
If CheckBox7.Value = True Then
CheckBox7.BackColor = vbRed
CheckBox7.Caption = "Incomplet"
Else
CheckBox7.BackColor = vbWhite
CheckBox7.Caption = "Incomplet"
End If
If CheckBox1.Value True And CheckBox7.Value True Then
MsgBox "Veuillez ne choisir qu'une seule case!", vbExclamation + vbOKOnly, Title = "ATTENTION!"
Else
End If

End Sub


Merci d'avance
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 18:33
Déjà (et tout en continuant à insister sur mon désavoeu d'une telle conception) :

1) Ce que tu as écrit devrait s'écrire ainsi :

Private Sub CheckBox1_Click()
  reac_cb CheckBox1
End Sub


Private Sub CheckBox7_Click()
 reac_cb CheckBox7
End Sub

Private Sub reac_cb(cb As Control)
  If CheckBox1.Value And CheckBox7.Value Then
    MsgBox "Veuillez ne choisir qu'une seule case!", vbExclamation + vbOKOnly, Title = "ATTENTION!"
    cb.Value = False
    Exit Sub
  End If
  If cb.Value = True Then
    cb.BackColor = vbGreen
    cb.Caption = "Complet"
  Else
    cb.BackColor = vbWhite
    cb.Caption = "Complet"
  End If
End Sub


2) j'imagine que ces checkboxes sont sur un userform.
Si tu veux en mémoriser la valeur et la retrouver à la prochaine ouverture, tu peux (entre autres) mémoriser ces valeurs dans deux cellules. A l'ouverture : lire ces deux cellules et réattribuer ces valeurs.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 18:36
pardon changer "Complet" pour "Incomplet" dans le Else, bien sûr.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
24 nov. 2011 à 19:29
J'ai bidouillé ce truc tu en penses quoi (même si tu n'es pas d'accord??)

Private Sub CheckBox1_Click()
    If CheckBox1 Then
        If CheckBox7 Then
                  CheckBox7 = False 'cela va déclencher l'évènement CheckBox7_Click
        End If
        CheckBox1.BackColor = vbGreen
        CheckBox1.Caption = "Complet"
    Else
        CheckBox1.BackColor = vbWhite
        CheckBox1.Caption = "Complet"
    End If
End Sub
Private Sub Checkbox7_Click()
    If CheckBox7 Then
        If CheckBox1 Then
              CheckBox1 = False 'cela va déclencher l'évènement CheckBox1_Click
        End If
        CheckBox7.BackColor = vbRed
    
        CheckBox7.Caption = "Incomplet"
    Else
        CheckBox7.BackColor = vbWhite
        CheckBox7.Caption = "Incomplet"
    End If
End Sub


Par contre ton code est mieux pour pouvoir utiliser dans une autres userform car la j'ai bidouillé ce code mais pas bon :

Private Sub TextBox1_Change()
If UserForm2.CheckBox1.Value = True Then
TextBox1.BackColor = vbGreen
TextBox1.Caption = "Complet"
Else: UserForm2.CheckBox7.Value = True
TextBox1.BackColor = vbRed
TextBox1.Caption = "A COMPLETER"
End If
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 nov. 2011 à 19:34
J'en pense quoi ? =)==>> que tu ne sais plus (et nous non plus) où tu vas !
Voilà qu'apparaît maintenant une textbox (dont on ne sait même pas à quoi elle peut servir).
Moi, j'arrête ici mon intervention, maintenant.
Bonne chance

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
25 nov. 2011 à 00:04
Si j'ai bien compris, enfin presque

si on a encore rien selectionné , les deux false
si on a selectionné l'un ou l'autre il y en a toujours un de sélectionné
(on voit comme ça que quelqu'un l'a modifié une deuxième fois)

ton code devrait fonctionner mais si on décoche un on doit cocher l'autre et tes remarque

cela va déclencher l'évènement CheckBox1_Click


et

cela va déclencher l'évènement CheckBox2_Click


ne sont pas juste, l'évènement ne va pas être déclenché car pas de click mais changement de valeur simplement.

de plus ta condition

If CheckBox7 Then
                  CheckBox7 = False 'cela va déclencher l'évènement CheckBox7_Click
End If


et

If CheckBox1 Then
              CheckBox1 = False 'cela va déclencher l'évènement CheckBox1_Click
End If


ne sont plus nécessaire car sur le click on force le changement.


le code peut donc devenir :

Private Sub CheckBox1_Click()
    If CheckBox1 Then
        CheckBox7 False 'pas vrai>cela va déclencher l'évènement CheckBox7_Click
        CheckBox1.BackColor = vbGreen
        CheckBox1.Caption = "Complet"
    Else
        CheckBox7 True  'si CheckBox1 devient false alors CheckBox7 true 
        CheckBox1.BackColor = vbWhite
        CheckBox1.Caption = "Complet"
    End If
End Sub
Private Sub Checkbox7_Click()
    If CheckBox7 Then
        CheckBox1 False 'pas vrai> cela va déclencher l'évènement CheckBox1_Click
        CheckBox7.BackColor = vbRed
        CheckBox7.Caption = "Incomplet"
    Else
        CheckBox1 True  'si CheckBox7 devient false alors CheckBox1 true
        CheckBox7.BackColor = vbWhite
        CheckBox7.Caption = "Incomplet"
    End If
End Sub



et j'ai oublié de changé les couleurs mais enfin....


Le style de fonction de ucfoutu était plus facile à adapter le "click" sur checkbox1 a la même réaction sur checkbox7 que le "click sur checkbox7 a sur checkbox1.

il suffit de créer

Private Sub reac_cb(cbON as Control,cbOFF as Control)


cbON le checkbox que tu veux cocher et cbOFF le checkBox qui se décoche automatiquement.

Mais bon à toi petit peu ...

Bonne soirée




Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
25 nov. 2011 à 09:45
Bonjour à tous,

J'ai apporté des modifications pour pouvoir récupérer les informations à l'ouverture et fermeture du fichier, car j'aimerai utilisé ces informations dans un autre userform. Pour cela j'ai fait cela :
Private Sub CheckBox1_Click()


If Range("A1").Value = 1 Then
CheckBox1.Value = True
Else
CheckBox7.Value = True
End If

If CheckBox1 Then
If CheckBox7 Then
CheckBox7 = False
CheckBox7_Click
End If
CheckBox1.BackColor = vbGreen
CheckBox1.Caption = "Complet"

Else
CheckBox1.BackColor = vbWhite
CheckBox1.Caption = "Complet"
End If

If CheckBox1.Value = True Then
Range("A1").Value = 1
Else
Range("A1").Value = 0
End If

End Sub
Private Sub Checkbox7_Click()
If CheckBox7 Then
If CheckBox1 Then
CheckBox1 = False
CheckBox1_Click
End If
CheckBox7.BackColor = vbRed

CheckBox7.Caption = "Incomplet"
Else
CheckBox7.BackColor = vbWhite
CheckBox7.Caption = "Incomplet"

End If
End Sub

Avec ça j'ai mes informations qui se rangent au bon emplacement(A1) mais les checkbox ne les prennent pas en compte à l'ouverture.

Pourquoi?

Merci d'avance
0