[VB/VBA] Conversion nombre Romain -> Arabe
Ces fonctions permettent de convertir des nombres romain exprimer en "lettres" du type MCMLXIX en nombre au format arabe soit 1969.
Ces procédures sont disponnible en fonction personnalisée pour Excel et en VBA pour un Userform.
Le code VBA est compatible avec VB6.
FONCTION PERSONNALISÉE POUR EXCEL
Coller le code ci-dessous dans un module général, Module1 par exemple.
Dim Rm As String Public Function RomainArabe(C As Range) As Integer Dim TB Dim Arab As Integer Dim i As Byte, A As Integer, Utb As Integer If C = "" Then RomainArabe = 0: Exit Function ReDim TB(0) Application.Volatile i = 1: Utb = 1: Arab = 0 Rm = Replace(C, " ", "") 'supprime les espaces éventuels Rm = UCase(Rm) ' met en majuscule si nécessaire While i <= Len(Rm) 'traite les lettres une a une ReDim Preserve TB(Utb) A = NBlettre(i) TB(Utb) = A * ValeurLettre(Mid(Rm, i, 1)) Debug.Print TB(Utb) i = i + A Utb = Utb + 1 Wend ReDim Preserve TB(Utb): i = 1 While i < UBound(TB) If TB(i) < TB(i + 1) Then Arab = Arab + TB(i + 1) - TB(i) i = i + 2 Else Arab = Arab + TB(i) i = i + 1 End If Debug.Print Arab Wend RomainArabe = Arab End Function Function NBlettre(Deb As Byte) As Byte Dim i As Integer, L As String NBlettre = 1 L = Mid(Rm, Deb, 1) For i = Deb + 1 To Len(Rm) If Mid(Rm, i, 1) = L Then NBlettre = NBlettre + 1 Else Exit Function End If Next End Function Function ValeurLettre(L As String) As Integer Dim Romain, Arabe, i As Byte Romain = Array("I", "V", "X", "L", "C", "D", "M") Arabe = Array(1, 5, 10, 50, 100, 500, 1000) For i = 0 To 6 If L = Romain(i) Then ValeurLettre = Arabe(i) Exit Function End If Next i End Function
Exemple de formule à placer dans une feuille Excel
'=RomainArabe(A3)
CODE POUR VBA ET VB6
Coller le code ci-dessous dans un module général, Module1 par exemple pour le VBA
Ou dans un Module.bas pour VB6
Option Explicit Dim Rm As String Public Function TraduitRomain(Rm) As Integer Dim TB Dim Arab As Integer Dim i As Byte, A As Integer, Utb As Integer ReDim TB(0) i = 1: Utb = 1 Rm = Replace(Rm, " ", "") 'supprime les espaces éventuels Rm = UCase(Rm) ' met en majuscule si nécessaire While i <= Len(Rm) 'traite les lettres une a une ReDim Preserve TB(Utb) A = NBlettre(i) TB(Utb) = A * ValeurLettre(Mid(Rm, i, 1)) Debug.Print TB(Utb) i = i + A Utb = Utb + 1 Wend ReDim Preserve TB(Utb): i = 1 While i < UBound(TB) If TB(i) < TB(i + 1) Then Arab = Arab + TB(i + 1) - TB(i) i = i + 2 Else Arab = Arab + TB(i) i = i + 1 End If Debug.Print Arab Wend TraduitRomain = Arab End Function Private Function NBlettre(Deb As Byte) As Byte Dim i As Integer, L As String NBlettre = 1 L = Mid(Rm, Deb, 1) For i = Deb + 1 To Len(Rm) If Mid(Rm, i, 1) = L Then NBlettre = NBlettre + 1 Else Exit Function End If Next End Function Private Function ValeurLettre(L As String) As Integer Dim Romain, Arabe, i As Byte Romain = Array("I", "V", "X", "L", "C", "D", "M") Arabe = Array(1, 5, 10, 50, 100, 500, 1000) For i = 0 To 6 If L = Romain(i) Then ValeurLettre = Arabe(i) Exit Function End If Next i End Function
Exemple d'appel de la fonction
Sub AppelEnArabic() Dim R As String R = "MMMCMIC" MsgBox R & " en chiffre arabe donnerait " & TraduitRomain(R) End Sub
A découvrir aussi
- [VBA] Cacher barre des tâches pour appli plein écran
- VB.Net - Suivi de l'état batterie d'un portable
- Créer un setup d'installation - Inno Setup Compiler
Retour aux articles de la catégorie Programmation -
⨯
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 2 autres membres