Vous avez inséré des contrôles de contenu pour demander par exemple un numéro de sécurité sociale, des numéros de téléphone, des prix, etc. Et vous souhaitez un formatage automatique afin que les espaces soient automatiquement ajoutées.

Tout cela ne peut se faire qu'avec une macro. Il s'agira d'une macro événementielle qui se déclenchera à la sortie du contrôle. L'utilisateur devra donc cliquer en dehors du contrôle pour que la macro se déclenche.

Une macro événementielle doit être créée dans ThisDocument. Voyez cet article.

La macro suivante va formater un numéro de sécurité sociale, un numéro de téléphone et un montant avec le signe €.

Cela sous-entend tout d'abord de donner des balises aux contrôles, afin que ces derniers soient reconnus par la macro. Ici, on a la balise "sécu" pour le contrôle de contenu destiné au numéro de sécurité sociale, la balise "tél" pour le contrôle destiné à un numéro de téléphone, et la balise "montant" pour un contrôle destiné à un montant en €.

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim nsecu, ntel, montant
'Format Sécurité sociale
If CC.Tag = "sécu" Then
nsecu = CC.Range.Text
If nsecu <> CC.PlaceholderText Then
nsecu = Format(nsecu, "0 00 00 00 000 000 00")
CC.Range = nsecu
End If
End If

If CC.Tag = ("tél"Then
'Format numéro de téléphone
ntel = CC.Range.Text
If ntel <> CC.PlaceholderText Then
ntel = Format(ntel, "00 00 00 00 00")
CC.Range = ntel
End If
End If

If CC.Tag = ("montant"Then
'Format Montant en €
montant = CC.Range.Text
If montant <> CC.PlaceholderText Then
montant = Format(montant, "# ###,## €")
CC.Range = montant
End If
End If
End Sub


 

Voici la version luxe… Cette macro est créée plus particulièrement pour les numéros de téléphone et de sécurité sociale. Elle va vérifier que l'utilisateur a bien saisi 10 chiffres pour le numéro de téléphone et 15 pour le numéro de sécurité sociale.

NB : Si vous avez plusieurs contrôles de contenu pour des numéros de téléphone différents, il suffit de mettre la même balise pour chacun de ces contrôles.

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
'macro écrite par m@rina
Dim texte As String, i, Result, nb

texte = CC.Range.Text
If CC.ShowingPlaceholderText = False Then
    If Not IsNumeric(texte) Then GoTo fin:

    Select Case CC.Tag
        Case "tél"
        For i = 1 To Len(texte)
            If IsNumeric(Mid(texte, i, 1)) Then
            Result = Result & Mid(texte, i, 1)
            End If
            Next
            CC.Range = Result
            nb = CC.Range.Characters.Count

            If nb <> 10 Then
            MsgBox "le numéro n'est pas correct, il doit comporter 10 chiffres"
            Else: texte = Format(texte, "0# ## ## ## ##")
            CC.Range = texte
            End If

        Case "sécu"
        For i = 1 To Len(texte)
            If IsNumeric(Mid(texte, i, 1)) Then
            Result = Result & Mid(texte, i, 1)
            End If
            Next
            CC.Range = Result
            nb = CC.Range.Characters.Count

            If nb <> 15 Then
            MsgBox "le numéro n'est pas correct, il doit comporter 15 chiffres"
            Else: texte = Format(texte, "0 00 00 00 000 000 00")
            CC.Range = texte
            End If
    End Select

 End If
 Exit Sub
fin: MsgBox "Numéro incorrect"


End Sub