FAQ WordConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireFormulaires WordFormulaires Word VBA

Les champs utilisés pour les formulaires peuvent être associés à des macros.
Un double-clic sur le contrôle

Image non disponible

La liste déroulante vous permet de choisir une macro.

Créé le 20 janvier 2008  par Lebeau Olivier

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.

 
Sélectionnez

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é)

Créé le 20 janvier 2008  par Lebeau Olivier

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.

Créé le 20 janvier 2008  par Lebeau Olivier

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.

 
Sélectionnez

Dim fld As FormField
For Each fld In Activeocument.FormFields
Debug.Print fld.Result
Next fld
Créé le 20 janvier 2008  par Lebeau Olivier

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.

 
Sélectionnez

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 50
    Me.ComboBox1.AddItem "a" & i
Next i
End Sub

Nous pourrions envisager l'utilisation d'un tableau pour le remplissage du combo.

 
Sélectionnez

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
Créé le 20 avril 2008  par Lebeau Olivier

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.

Avec un tableau
Sélectionnez

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

Avec la méthode AddItem
Sélectionnez

Private Sub UserForm_Initialize()
Dim i As Byte
For i = 1 To 40
    Me.ComboBox1.AddItem "a" & i
Next i
End Sub

Lors de l'ouverture du document, il faut initialiser le UserForm

Initialisation du UserForm
Sélectionnez

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.

Mise à jour du champ texte après choix
Sélectionnez

Private Sub ComboBox1_Change()
ActiveDocument.FormFields(1).Result = Me.ComboBox1.Value
UserForm1.Hide
 
End Sub
Créé le 20 avril 2008  par Lebeau Olivier

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.

 
Sélectionnez

   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

KB 163192

Créé le 1er juin 2009  par Lebeau Olivier
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.