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, quelque 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
'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