CheckBox.BackColor dans une fonction VBA

Résolu/Fermé
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 18 juin 2020 à 17:03
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 19 juin 2020 à 11:10
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

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
19 juin 2020 à 10:59
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
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
19 juin 2020 à 11:10
Merci !
0