Question 200

Comment convertir un nombre en chiffres romains en VB ?

Bien que le système de numérotation en chiffres romains ne soit plus guère utilisé de nos jours, il peut être intéressant de disposer d'une fonction permettant de convertir un nombre dans cette notation.

L'implémentation proposée ici utilise la notation classique; pour plus de détails sur les différentes notations, on pourra se référer à l'article de wikipédia dans la section "Pour aller plus loin".

'------------------------------------------------------------------
' Procedure : DigitsToRoman
' DateTime  : 17/07/2008 13:41
' Author    : Jean-marc
' Purpose   : Convert a number (string) into its roman numeral form
' Input     : The number to convert, as a character string.
' Output    : The roman numeral conversion
' Note      : The input number must be in the range "0" to "3999"
' Example   : DigitsToRoman("1969") returns "MCMLXIX"
'------------------------------------------------------------------
'
Private Function DigitsToRoman(ByVal number As String) As String

    Const ROMDIG    As String = "IXCMVLD"   ' Roman 'digits'
    Const MAXROM    As Integer = 3999       ' Max roman value
    Const POSFIV    As Integer = 5          ' pos of the 5's serie
    
    Dim i           As Integer  ' loop control
    Dim va          As Integer  ' for validity check
    Dim le          As Integer  ' input string length
    Dim cv          As Integer  ' input digits
    Dim rd          As String   ' roman digit
    Dim re          As String   ' temporary string for result
    
    number = Trim$(number)
    va = Val(number)
    If (va > 0) And (va < MAXROM) Then
        le = Len(number)
        For i = le - 1 To 0 Step -1
        
            cv = Val(Mid$(number, le - i, 1))
            rd = Mid$(ROMDIG, i + 1, 1)
            
            Select Case cv
                Case 0 To 3
                    re = re & _
                        String$(cv, rd)
                Case 4 To 5
                    re = re & _
                        String$(POSFIV - cv, rd) & Mid$(ROMDIG, i + POSFIV, 1)
                Case 6 To 8
                    re = re & _
                        Mid$(ROMDIG, i + POSFIV, 1) & String$(cv - POSFIV, rd)
                Case 9
                    re = re & _
                        rd & Mid$(ROMDIG, i + 2, 1)
            End Select
            
        Next i
        DigitsToRoman = re
    End If
End Function

Exemple d'utilisation

' Conversion du nombre 1969 en chiffres romains
    
    Dim n       As Integer
    Dim result  As String
    
    n = 1969
    
    result = DigitsToRoman(Str$(n))
    
    MsgBox n & " en chiffres romains : " & result

Remarque : comme il est mentionné dans le commentaire de la fonction, le nombre à convertir doit être dans l'intervalle 0-3999.

Pour aller plus loin

Voir aussi :

Date de publication : 11 septembre 2008
Dernière modification : 11 septembre 2008
Rubriques : Algorithmique, Divers, Texte & strings
Mots-clés : convertir, conversion, nombres, chiffres, arabes, arabe, romain, romains, roman, numeral, représentation, string, mid, const