none
Checkbox TripleState - Valeurs [résolu] RRS feed

  • Question

  • Bonjour,

    Je débute en VBA et j'aimerais utiliser des checkboxes en mode triplestate dans un document Word 2007.
    L'objectif est de créer des documents qui doivent être lu par plusieurs personnes et chaque personne devra cocher sa case de validation. Une case non cochée fera apparaitre une case rouge dans le résumé du document, une case grisée devra faire apparaitre une case orange dans le résumé et la case cochée fera apparaitre du vert dans le résumé.

    Si je me réfère au code fourni sur ce site j'ai par exemple:

    Private Sub CheckBox1_Click()
    Select Case CheckBox1.Value
        Case vbUnchecked
            projectdescriptionLB1.Caption = "Rouge"
        Case vbChecked
            projectdescriptionLB1.Caption = "Vert"
        Case vbGrayed
            projectdescriptionLB1.Caption = "Orange"
    End Select
    End Sub

    projectdescriptionLB1 est un label qui se remplit quand j'utilise le checkbox.

    J'ai volontairement mis du texte à la place des couleurs pour l'instant.
    Ce qui se passe c'est que le texte "Rouge" est le seul qui s'affiche car vbChecked et vbGrayed ne sont jamais trouvés quand je clique sur le checkbox.

    Comme avec un select je ne vois pas la valeur du CheckBox1, j'ai remplacé le code précédent par celui ci:
    Private Sub CheckBox1_Click()
    projectdescriptionLB1.Caption = CheckBox1.Value
    End Sub

    Ce code retourne les valeurs suivantes selon l'état du checkbox
    True pour coché
    False pour grisé
    False pour décoché

    Je peux donc ici distinguer l'état coché et décoché mais je ne vois pas comment je peux repérer si un checkbox est en mode grisé.

    Est-ce que quelqu'un peut m'aider?

    Merci
    Laurent



    • Modifié LaurentW. _ mercredi 30 décembre 2009 11:31
    mercredi 30 décembre 2009 08:57

Réponses

  • Bonjour,

    J’ai essayé de reproduire votre problème et j’ai remarqué que la méthode CheckBox1_Click() n’est pas appelée quand l’état du checkbox change de "unchecked" a "grayed"

    Alors, je vous conseille d’utiliser l’évènement  "Change" avec la méthode CheckBox1_Change() et d’ajouter le code suivant :

     

    Private Sub CheckBox1_Change()
    If IsNull(CheckBox1.Value) Then projectdescriptionLB1.Caption = "undetermined" Exit Sub End If
    Select Case CheckBox1.Value Case True projectdescriptionLB1.Caption = "checked" Case False projectdescriptionLB1.Caption = "unchecked" End Select
    End Sub

     

    Quand le contrôle est en état indéfini, on a CheckBox1.Value = Null. C’est pour ça que j’ai fait la vérification pour null avant commencer le  "Select Case"

     

    J’espère que ça vous aidera.

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Proposé comme réponse TroxsaEditor mercredi 30 décembre 2009 11:41
    • Marqué comme réponse Alex Petrescu lundi 4 janvier 2010 14:29
    mercredi 30 décembre 2009 10:19

Toutes les réponses

  • Bonjour,

    J’ai essayé de reproduire votre problème et j’ai remarqué que la méthode CheckBox1_Click() n’est pas appelée quand l’état du checkbox change de "unchecked" a "grayed"

    Alors, je vous conseille d’utiliser l’évènement  "Change" avec la méthode CheckBox1_Change() et d’ajouter le code suivant :

     

    Private Sub CheckBox1_Change()
    If IsNull(CheckBox1.Value) Then projectdescriptionLB1.Caption = "undetermined" Exit Sub End If
    Select Case CheckBox1.Value Case True projectdescriptionLB1.Caption = "checked" Case False projectdescriptionLB1.Caption = "unchecked" End Select
    End Sub

     

    Quand le contrôle est en état indéfini, on a CheckBox1.Value = Null. C’est pour ça que j’ai fait la vérification pour null avant commencer le  "Select Case"

     

    J’espère que ça vous aidera.

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Proposé comme réponse TroxsaEditor mercredi 30 décembre 2009 11:41
    • Marqué comme réponse Alex Petrescu lundi 4 janvier 2010 14:29
    mercredi 30 décembre 2009 10:19
  • C'est absolument parfait! Ca résoud le problème.
    Merci pour l'intervention.
    Laurent
    mercredi 30 décembre 2009 11:31