Comment réaliser l'automatisation du formatage des nombres ordinaux français ?


Sub Cardinaux
'########################################################
'# Cette macro a pour but l'automatisation du formatage #
'# des nombres ordinaux français. #
'# --------- #
'# Conditions de fonctionnement: #
'# - le curseur doit être placé directement #
'# après le nombre à formater #
'# - le nombre doit être du type: #
'# #
'# Ex: 4000ème #
'# - sont prises en compte les extensions suivantes #
'# èmes, ème, ères, ère, er, des, de, d #
'# Libre à vous d'en adapter le contenu à vos besoins...#
'# ...et aux règles de l'orthographe ;-) #
'# --------- #
'# Bug et limitations connues: #
'# - le code pourrait être plus élégant et plus léger #
'# - la macro ne prend pas en compte les nombres #
'# romains tels que "XXIème" #
'# - fonctionne parfaitement avec StarOffice 5.2 #
'# (= aucune garantie pour les versions #
'# postérieures !) #
'# --------- #
'# Éric Savary - Septembre 2001 #
'########################################################

'Sélctionne le dernier 'mot' tapé
Selection.GoToPrevWord( TRUE )
'Récupère la sélection
Contenu = ActiveWindow.SelectionTextExt

'Teste la dernière lettre de la sélection
'pour vérifier qu'il s'agit bien d'une terminaison de cardinal
cardinal1 = right(Contenu, 1)
Select case cardinal1
Case "d"
coupure = 1
goto formater_en_consequence
Case Else
goto card2
End select

Exit sub

card2:
'Teste les 2 dernières lettres de la sélection
'pour vérifier qu'il s'agit bien d'une terminaison de cardinal
cardinal2 = right(Contenu, 2)
Select case cardinal2
Case "er"
coupure = 2
goto formater_en_consequence
Case "de"
coupure = 2
goto formater_en_consequence
Case Else
goto card3
End select

Exit sub

card3:

'Teste les 3 dernières lettres de la sélection
'pour vérifier qu'il s'agit bien d'une terminaison de cardinal
cardinal3 = right(Contenu, 3)
Select case cardinal3
Case "ère"
coupure = 3
goto formater_en_consequence
Case "ers"
coupure = 3
goto formater_en_consequence
Case "ème"
coupure = 3
goto formater_en_consequence
Case "des"
coupure = 3
goto formater_en_consequence
Case Else
goto card4
End select
Exit sub

card4:

'Teste les 4 dernières lettres de la sélection
'pour vérifier qu'il s'agit bien d'une terminaison de cardinal
cardinal4 = right(Contenu, 4)
Select case cardinal4
Case "èmes"
coupure = 4
goto formater_en_consequence
Case "ères"
coupure = 4
goto formater_en_consequence
Case Else
goto pas_cardinal
End select

Exit sub

pas_cardinal:

Msgbox "Ceci n'est pas un nombre cardinal !"
Selection.GoToNextWord( FALSE )

Exit Sub

formater_en_consequence:
nombre = left(contenu, len(contenu)-coupure)
cardinal = right(contenu, coupure)
Selection.Insert(nombre)
Selection.Font.SuperScript = TRUE
Selection.Insert(cardinal)
Selection.Font.SuperScript = FALSE
'cette dernière ligne peut être supprimée
'pour éviter l'insertion d'un espace
'après le reformatage
Selection.Insert (" ")

End Sub

Auteur : Eric Savary

Date : 05/09/2001

© Guy Capra, ALOMPHEGA