CheckBox.BackColor dans une fonction VBA

Résolu
Bonjour à tous,

Je manipule habituellement la VBA sur excel et je manque de connaissance sur le vocabulaire VBA Word et j'aurai besoin de vos lumières :

Je travaille sur un document Word qui a plusieurs dizaines de chekbox
Je souhaite que lorsque que je clic une première fois sur la checkbox le backcolor passe en vert, au deuxième clic le backcolor passe en orange , et au troisième clic le backcolor revienne à la couleur par défaut et que checkbox.value=False

J'ai réussi à écrire tout ça sur une checkbox, ça fonctionne comme je le souhaite :
Private Sub Test_Click()

    If test.Value = True Then
        If test.Value = True And test.BackColor = RGB(224, 128, 32) Then
            test.BackColor = vbWhite
            test.Value = False
        Else
            test.BackColor = vbGreen

        End If
    Else
        If test.BackColor = vbGreen Then test.BackColor = RGB(224, 128, 32)

    End If

End Sub

mais je n'arrive pas à trouver la synthaxe pour rendre ce code générique dans une fonction pour n'avoir qu'a appeler la fonction dans chaque chekbox.
voici ce que j'ai essayé suite à mes recherche sur internet et qui ne fonctionne pas :

Private Sub Test_Click()

Color ("Test")

End Sub

Function Color(varTest)

    If ThisDocument.FormFields(varTest).CheckBox.Value = True Then
        If ThisDocument.FormFields(varTest).CheckBox.Value = True And ThisDocument.FormFields(varTest).BackColor.RGB = RGB(224, 128, 32) Then
            ThisDocument.FormFields(varTest).BackColor = vbWhite
            ThisDocument.FormFields(varTest).CheckBox.Value = False
        Else
            ThisDocument.FormFields(varTest).BackColor = vbGreen
        End If
    Else
        If ThisDocument.FormFields(varTest).BackColor = vbGreen Then
            ThisDocument.FormFields(varTest).BackColor = RGB(224, 128, 32)
        End If

    End If

End Function


merci d'avance pour vos conseils et votre temps

Configuration: Windows / Chrome 83.0.4103.97


--
Quand on ne dispose que d'un marteau tout les problèmes ressemblent à un clou

1 réponse

  1. Modérateur
    Bonjour,

    C'est, très exactement, la même façon de coder qu'avec Excel.
    Tu passes la CheckBox en paramètre de ta fonction, pas son nom...

    Option Explicit
    
    Private Sub CheckBox1_Click()
        Colorie CheckBox1
    End Sub
    Private Sub CheckBox2_Click()
        Colorie CheckBox2
    End Sub
    
    Private Sub Colorie(C As MSForms.CheckBox)
        With C
            If .Value = True Then
                If .Value = True And .BackColor = RGB(224, 128, 32) Then
                    .BackColor = vbWhite
                    .Value = False
                Else
                    .BackColor = vbGreen
                End If
            Else
                If .BackColor = vbGreen Then .BackColor = RGB(224, 128, 32)
            End If
        End With
    End Sub

    1
    1. Merci !
      0