FAQ Word
FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
- Comment faire pour effectuer une action sur un champ de formulaire ?
- Comment imposer pour les cases à cocher des formulaires un choix unique ?
- Pourquoi je ne parviens pas à utiliser les champs de mon formulaire ?
- Comment récupérer les données de mon formulaire ?
- Comment ajouter des données à une liste déroulante ?
- Comment faire pour obtenir une liste déroulante contenant plus de 25 items ?
- Comment faire pour insérer plus de 255 caractères dans un champ texte de mon formulaire en VBA ?
Les champs utilisés pour les formulaires peuvent être associés à des macros.
Un double-clic sur le contrôle
La liste déroulante vous permet de choisir une macro.
Contrairement aux UserForm, les formulaires ne permettent pas un groupement des cases à cocher.
Par le biais des macros, il est possible d'imposer un seul choix.
Le principe est simple, il suffit de décocher toutes les autres cases à cocher.
Sub
CaseACocher1
(
)
ActiveDocument.FormFields
(
2
).Result
=
False
ActiveDocument.FormFields
(
3
).Result
=
False
ActiveDocument.FormFields
(
4
).Result
=
False
ActiveDocument.FormFields
(
5
).Result
=
False
End
Sub
Si nous avons 5 cases à cocher, lors du choix de la première, on change la valeur des autres à Faux (non coché)
Pour pouvoir utiliser un formulaire, le document doit être protégé. Même si aucun mot de passe n'est défini, sans protection, vous ne pouvez remplir le formualire.
La récupération des données de formulaire ne devient réellement intéressante qu'en VBA.
On récupère le contenu d'un champ de formulaire avec la propriété Result de ce champ.
Dim
fld As
FormField
For
Each
fld In
Activeocument.FormFields
Debug.Print
fld.Result
Next
fld
La méthode utilisée pour ajouter des données à une liste déroulante se fait de préférence sur l'initialisation du UserForm.
Dans l'exemple qui suit, nous allons sur l'évènement Initialize du UserForm remplir le Combo avec deux éléments : "a" et i.
Private
Sub
UserForm_Initialize
(
)
Dim
i As
Integer
For
i =
1
To
50
Me.ComboBox1.AddItem
"a"
&
amp;amp;amp;amp; i
Next
i
End
Sub
Nous pourrions envisager l'utilisation d'un tableau pour le remplissage du combo.
Option
Base 1
Private
Sub
UserForm_Initialize
(
)
Dim
i
(
6
) As
String
Dim
j As
Integer
i
(
1
) =
"A"
i
(
2
) =
"B"
i
(
3
) =
"C"
i
(
4
) =
"D"
i
(
5
) =
"E"
For
j =
1
To
UBound
(
i)
Me.ComboBox1.AddItem
i
(
j)
Next
j
End
Sub
Lien : Les tableaux en VBA
Dans un formulaire Word, il n'est pas possible d'utiliser une liste déroulante contenant plus de 25 entrées.
Pour obtenir une liste avec plus de 25 éléments, il est nécessaire de passer par un UserForm. Ce UserForm contiendra une liste déroulante.
Après la mise à jour, l'élément sélectionné sera envoyé dans un champ de formulaire du document.
Private
Sub
UserForm_Initialize
(
)
Me.ComboBox1.List
(
) =
Array
(
"Un"
, "Deux"
, "Trois"
)
End
Sub
Une autre possibilité de remplissage est l'utilisation de la méthode AddItem
Private
Sub
UserForm_Initialize
(
)
Dim
i As
Byte
For
i =
1
To
40
Me.ComboBox1.AddItem
"a"
&
amp;amp;amp;amp; i
Next
i
End
Sub
Lors de l'ouverture du document, il faut initialiser le UserForm
Sub
document_open
(
)
Load UserForm1
UserForm1.Show
End
Sub
L'écriture de la donnée dans le document. Pour recevoir la donnée, nous aurons besoin d'un champ texte.
Private
Sub
ComboBox1_Change
(
)
ActiveDocument.FormFields
(
1
).Result
=
Me.ComboBox1.Value
UserForm1.Hide
End
Sub
Lien : Support Microsoft
Lorsque vous souhaitez insérer dans le champ texte d'un formulaire, Word possède une limitation qui n'est pas décrite. Cette limitation se traduit de deux façons différentes, si votre texte fait 256 caractères, Word plante simplement, si vous avez plus de 256 caractères, vous recevez un message d'erreur.
Parallèlement, si vous entrez votre texte au clavier, vous ne rencontrez pas d'erreur. La solution consiste donc à simuler une entrée clavier dans votre champ.
Sub
WorkAround255Limit
(
)
' Ajout d'un texte particulier
ActiveDocument.FormFields
(
"text1"
).Result
=
"****"
If
ActiveDocument.ProtectionType
<>
wdNoProtection Then
ActiveDocument.Unprotect
End
If
Selection.GoTo
What:=
wdGoToBookmark, Name:=
"Text1"
Selection.Collapse
Selection.MoveRight
wdCharacter, 1
'Simulation de 256 caractères
Selection.TypeText
(
String
(
256
, "W"
))
Selection.GoTo
what:=
wdGoToBookmark, Name:=
"Text1"
' Suppression des étoiles
With
Selection.Find
.Execute
findtext:=
"*"
, replacewith:=
""
, replace
:=
wdReplaceAll
End
With
ActiveDocument.Protect
Password:=
""
, NoReset:=
True
, Type
:=
_
wdAllowOnlyFormFields
End
Sub