Petit voyant rouge ou vert avce VBA

Signaler
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011
-
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
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.
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Statut
Membre
Dernière intervention
8 décembre 2011

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