Le code VBA final de l’exemple
Tout l’exemple est téléchargeable dans l’exemple fourni. En allant dans VBE avec Alt+F11 on y trouvera la UserForm décrite plus haut ainsi que tout le code reproduit ci après :
Dans ThisDocument
Call Formulaire
End Sub
Private Sub CommandButton2_Click()
raz
End Sub
Sub Formulaire()
' Réaffiche la UserForm
UserForm1.Show
End Sub
Private Sub Document_Open()
' Lancement automatique à chaque nouveau document
Load UserForm1
UserForm1.Show
End Sub
Dans le module Signets
' *******************************
' *** Utilisation des signets ***
' *******************************
Public Sub RemplirSignet(S As String, T As String)
' Remplit le signet S avec le texte T sans détruire S
On Error GoTo rien
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
ActiveDocument.Bookmarks(S).Range.Text = T
ActiveDocument.Bookmarks.Add Name:=S, _<br> Range:=ActiveDocument.Range(Place, Place + Len(T))
rien:
End Sub
Sub raz()
Dim T As String ' Titre
Dim Q As String ' Question
Dim R As String ' Répondeur
Dim D As String ' Date
RemplirSignet "Titre", T
RemplirSignet "Question", Q
RemplirSignet "Répondeur", R
RemplirSignet "Date", D
End Sub
Dans le Userform
Option Explicit
Dim T As String ' Titre
Dim Q As String ' Question
Dim R As String ' Répondeur
Dim D As String ' Date
Private Sub UserForm_Initialize()
' Lors du chargement de la UserForm : opérations d'initialisations
' 1 - Remplissage de la liste déroulante
With Me.ComboBox1
.AddItem "Anacoluthe"
.AddItem "Argitxu"
.AddItem "Geo"
.AddItem "m@rina"
End With
' 2 - Initialisation de la date : aujourd'hui + 1 jour
Me.TextBox2.Value = Date + 1
' 3 - Initialisation du focus
Me.TextBox1.SetFocus
End Sub
Private Sub CommandButton1_Click()
' = Bouton Annuler
' Lui affecter la propriété Cancel à True
' pour bénéficier de la touche Echap (ESC)
'me.Hide conserve les données entrées si on relance le formulaire
Me.Hide
End Sub
Private Sub CommandButton2_Click()
Dim madate As Date
' = Bouton OK
' Les données du UserForm :
'Dim T As String ' Abonné m ou f
'Dim Q As String ' Question
'Dim R As String ' Répondeur
'Dim D As String ' Date
' 1 - Récupérer les données
If Me.OptionButton1 = True Then
T = "Cher abonné"
Else: T = "Chère abonnée"
End If
Q = Me.TextBox1.Text
R = Me.ComboBox1.Value
D = Me.TextBox2.Value
' 2 - Vérifier la cohérence des données
If Me.TextBox1.Value = "" Then
MsgBox "Il manque la question !", vbExclamation, "Erreur"
Exit Sub
End If
Me.TextBox2.Value = Format(TextBox2.Value, "dd mmmm yyyy")
madate = Date + 1
If Me.TextBox2.Value < madate Then
MsgBox "On ne peut répondre avant demain !", vbExclamation, "Erreur"
Me.TextBox2.Value = Date + 1
Exit Sub
End If
' 3 - Placer les données dans le document
RemplirSignet "Titre", T
RemplirSignet "Question", Q
RemplirSignet "Répondeur", R
RemplirSignet "Date", D
With ActiveDocument
.Fields.Update ' màj des champs pour le renvoi sur Titre
'ajout de couleur pour le répondeur et la date
.Bookmarks("Répondeur").Range.Font.ColorIndex = wdRed
.Bookmarks("Date").Range.Font.ColorIndex = wdRed
End With
' 4 - Fermer la Userform et la supprime de la mémoire
Unload Me
End Sub