C'est possible grâce aux champs. Les champs peuvent être entrés une fois manuellement s'il s'agit d'un document de publipostage. 

En revanche, s'il s'agit de convertir rapidement, dans n'importe quel document, des montants € en chiffres vers des montants Euros en lettres, la méthode manuelle des champs est trop complexe et l'on ira plus vite à le faire par macro.

Voici donc deux solutions, la première à réserver aux documents destinés au publipostage et donc à faire une seule fois, la seconde à utiliser aussi souvent que nécessaire, pour chaque besoin ponctuel, quel que soit le document.

Insertion de champs pour le publipostage

On peut utiliser l'insertion de formule avec les commutateurs suivants :

  • \* cardtext transforme les chiffres en lettres sans décimales, avec un arrondi
  • \* ordtext transforme les chiffres en lettres, avec un format ordinal
  • \* dollartext transforme les chiffres en lettres, ajoute le mot "et", mais garde les décimales en chiffres

Pour ce faire :

  • Ctrl + F9 pour insérer un champ
  • Saisir le montant en chiffre (ce peut être une formule)
  • Compléter par un commutateur cité ci-dessus

    N.B. \* cardtext arrondit le nombre
    la limite est 999999

 

Si l'on souhaite utiliser les commutateurs sans arrondir les nombres, en traitant les décimales et en insérant une devise (valable pour un document de publipostage par exemple), utiliser la méthode suivante :

{SET nombre {MERGEFIELD Montant}}
{SET entier {= INT (nombre)}}
{SET decimale {= nombre - entier}}
{= entier \* Cardtext} Euros {IF decimale > 0 "{= decimale*100 \* Cardtext} centimes"}

VBA pour utilisation ponctuelle

Voici donc une macro à mettre dans le normal.dotm ou, de préférence, dans un complément, afin d'y avoir accès depuis n'importe quel document. Il faudra lui affecter un raccourci clavier ou bien l'installer sur la barre d'outils Accès rapide.

Cette macro utilise aussi les champs. En voici les limites :

  • Valable pour les montants inférieurs ou égaux à 999 999,99.
  • La macro ne traite que deux chiffres après la virgule ; au-delà, le montant sera arrondi.
  • Sélectionnez le chiffre à convertir avant de lancer la macro.
  • Les espaces dans le montant, insécables ou non, sont autorisées

 

Sub conversion_lettres()
'macro écrite par m@rina
Dim Nombre As String, entier As String, reste As String
Dim virgule As Byte

If IsNumeric(Selection) = False Then GoTo fin2
Nombre = Trim(Selection.Text)

If Val(Nombre) > 999999 Then GoTo fin
virgule = InStr(1, Nombre, ",")
    If virgule = 0 Then
        Selection.Fields.Add Range:=Selection.Range, _
          Type:=wdFieldEmpty, Text:="= " + Nombre + " \* CardText", _
          PreserveFormatting:=True
        Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
        Selection.Fields.Unlink
        Selection.MoveRight Unit:=wdWord, Count:=1
        Selection.TypeText Text:=" Euros"
    Else:
        entier = Int(Nombre)
        reste = Format(CDbl(Nombre) - entier, "0.00"* 100
        Selection.Fields.Add Range:=Selection.Range, _
          Type:=wdFieldEmpty, Text:="= " + entier + " \* CardText", _
          PreserveFormatting:=True
        Selection.TypeText Text:=" Euros et "
        Selection.Fields.Add Range:=Selection.Range, _
          Type:=wdFieldEmpty, Text:="= " + reste + " \* CardText", _
          PreserveFormatting:=True
          Selection.TypeText Text:=" centimes "
        Selection.MoveLeft Unit:=wdWord, Count:=5, Extend:=wdExtend
        Selection.Fields.Unlink
    End If
Exit Sub
fin:
   MsgBox "Le chiffre est trop grand, ne dépassez pas 999 999,99", vbOKOnly
   Exit Sub
fin2:
   MsgBox "Veuillez sélectionner un nombre.", vbOKOnly
End Sub