Champs de formulaire hérités
Cette réponse concerne les cases à cocher de type "Formulaires hérités". Le fait de cocher une case devra déclencher le fait que d'autres cases soient également et automatiquement cochées.
Pour ce faire, une macro sera nécessaire. Cettre macro devra être automatiquement lancée lorsque la première case à cocher aura été cochée.
Pour commencer, donnez un nom aux signets de vos cases à cocher :
- Double cliquez sur la case et complétez la zone de texte Signet.
- Pour chaque case, donnez le même nom suivi d'un numéro. Exemple : C1, C2, C3, C4, etc.
- Profitez-en pour décocher l'option Case activée (hormis la première case).
Vous allez à présent copier et coller la macro ci-dessous. Modifiez le chiffre 6 en fonction du nombre de cases.
Sub caseacocher()
Dim case1 As CheckBox, X As Variant
Set case1 = ActiveDocument.FormFields("C1").CheckBox
For X = 2 To 6
If case1.Value = True Then
ActiveDocument.FormFields("C" & X).CheckBox.Value = True
Else: ActiveDocument.FormFields("C" & X).CheckBox.Value = False
End If
Next X
End Sub
Il faut maintenant que cette macro se déclenche lorsque la première case sera cochée. Double-cliquez sur cette première case puis, sous la rubrique À la sortie, sélectionnez la macro "caseacocher".
Pour que le tout fonctionne, protégez le document. Ensuite, lorsque vous aurez coché la première case, vous devrez sortir de cette case, avec par exemple un appui sur la touche de tabulation.
Contrôles de contenu
Cases à cocher "Contrôles de contenu"
Cette réponse concerne les cases à cocher de type "Contrôles de contenu", utilisables depuis la version 2007.
Le fait de cocher une case devra déclencher le fait que d'autres cases soient également et automatiquement cochées.
Pour ce faire, une macro sera nécessaire. Cette macro se déclenchera automatiquement lorsque la première case à cocher aura été cochée.
Pour commencer, donnez un titre identique aux cases à cocher liées :
- Sélectionnez la case à cocher.
- Sous l'onglet Développeur, groupe Contrôles, cliquez sur le bouton Propriétés.
- Complétez la case Titre.
- Il suffira ensuite de faire un copier-coller de cette case qui conservera le même titre.
Vous allez à présent copier et coller la macro ci-dessous. Elle devra se trouver dans ThisDocument (voir éventuellement explications ici)
Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
'macro écrite par m@rina
Dim CC2 As ContentControl, titre As String
For Each CC In ActiveDocument.ContentControls
titre = CC.Title
If CC.Checked = True Then
For Each CC2 In ActiveDocument.ContentControls
If CC2.Title = titre Then CC2.Checked = True
Next
Else
For Each CC2 In ActiveDocument.ContentControls
If CC2.Title = titre Then CC2.Checked = False
Next
End If
Next
End Sub
Lorsque vous aurez coché la première case, vous devrez sortir de cette case, avec par exemple un appui sur la touche de tabulation ou un clic ailleurs dans le document.
NB : vous pouvez ainsi créer autant de cases que souhaité. Toutes les cases qui porteront le même titre que la première seront automatiquement cochées ou décochées en même temps que la première.
Voici une autre macro qui, cette fois, utilise les balises des contrôles. Le fait de cocher une case dont la balise serait "toto" devra déclencher le fait que les autres cases avec la même balise soient également et automatiquement cochées (ou décochées).
Pour commencer, donnez une balise identique aux cases à cocher liées :
- Sélectionnez la case à cocher.
- Sous l'onglet Développeur, groupe Contrôles, cliquez sur le bouton Propriétés.
- Complétez la case Balise.
- Il suffira ensuite de faire un copier-coller de cette case qui conservera la même balise.
Vous allez à présent copier et coller la macro ci-dessous. Elle devra se trouver dans ThisDocument (voir éventuellement explications ici)
Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim x, y
y = ActiveDocument.SelectContentControlsByTag("toto").Count
For x = 1 To y
If CC.Tag = "toto" And CC.Checked = True Then
ActiveDocument.SelectContentControlsByTag("toto")(x).Checked = True
Else
ActiveDocument.SelectContentControlsByTag("toto")(x).Checked = False
End If
Next
End Sub