Chiffre arabe en romain

Résolu
Bonjour, J'ai un soucis avec un projet en VB je ne comprend pas comment on pourrais faire pour le créer.
Merci de bien vouloir me répondre

3 réponses

  1. Contributeur
    re,

    On convertit un chiffre arabe <4000 en chiffre romain
    par ex 2954 devrait donner MMCMLIV

    proposition VBA
    Dim Romain As String
     
     Sub test()
    convertir_arabic_roman 1054
    MsgBox Romain
    Romain = ""
    End Sub
     
     '--------
    
     Sub convertir_arabic_roman(Nombre)
     Dim Chiffre As Byte
     If Nombre > 3999 Then GoTo depassement
     'milliers
     If Nombre > 999 Then
         Chiffre = Int(Nombre / 1000)
         'romain = Application.Rept("M", chiffre) 'VbA Excel
         For cptr = 1 To Chiffre
              Romain = Romain & "M"
         Next
         Nombre = Nombre Mod 1000
    End If
    'centaines
    If Nombre > 99 Then
         concatener_romain Nombre, 100, "C", "D"
         Nombre = Nombre Mod 100
    End If
    'dizaines
    If Nombre > 9 Then
         concatener_romain Nombre, 10, "X", "L"
         Nombre = Nombre Mod 10
    End If
    'unités
    concatener_romain Nombre, 1, "I", "V"
     Exit Sub
     
    depassement:
     MsgBox "nombre > 3999", vbCritical
     End Sub
    
    '---------
    
    Sub concatener_romain(Arabe, Diviseur, Encours, Cinq_n)
         Dim Chiffre As Byte
         Dim Ssschiffre As String
         Chiffre = Int(Arabe / Diviseur)
         Select Case Chiffre
         Case Is = 9
              Romain = Romain & Encours & Right(Romain, 1)
         Case Is > 5
              For cptr = 6 To Chiffre
                   sschiffre = sschiffre & Encours
              Next
              Romain = Romain & Cinq_n & sschiffre
         Case Is = 5
              Romain = Romain & Cinq_n
         Case Is = 4
              Romain = Romain & Encours & Cinq_n
         Case Else
              For cptr = 1 To Chiffre
                   Romain = Romain & Encours
              Next
      End Select
      
    End Sub

    2
    1. Contributeur
      Bonjour Michel.
      Belle démo (+1) : tu devrais la poster dans les astuces.
      Mais appariement il y a une fonction VB que tu a oublié (:
           For cptr = 1 To Chiffre 
                Romain = Romain & "M" 
           Next

      Équivalent :
          Romain = String(Chiffre, "M")

      Cdlt.
      0
    2. Contributeur
      Bonjour lermite

      merci pour les compliments :o), j'en suis tout colorindex 3 !!!

      concernant ta remarque en Excel j'ai utilisé la fonction worksheetfunction "rept"(voir le code + haut), je regarde ta suggestion je te passe la version Excel (macros paramétrées)
      0
    3. Contributeur
      Effectivement ta suggestion est + élégante que la mienne et j'aurai appris qqchose.merci :o)

      ci joint la bricole
      https://www.cjoint.com/?3JDr0dtKtyx
      0
  2. Bonjour,

    Tu pourrais expliquer plus clairement ton soucis ?
    Tu as un problème de police de caractère ?
    Tu veux un algorithme qui traduise un nombre écrit en français en chiffre romain ? Ou un nombre écrit en arabe en chiffre romain ?
    Tu as un problème pour créer un projet dans Visual Studio ?

    C'est vraiment pas clair !

    Xavier
    0
    1. Contributeur
      Bonjour,

      On trouve quelques proc VB pour traduire des chiffres romains en chiffres arabes
      au cas où cela t'interesserait
      http://frederic.sigonneau.free.fr/code/Fonctions/ChiffresRomainsChiffresArabes1.txt
      http://frederic.sigonneau.free.fr/code/Fonctions/ChiffresRomainsChiffresArabes2.txt

      une piste: l'idée serait d'utiliser les propriétés INT d'une division et MOD pour le reste et répétition du résultat et concaténer

      par exemple 2200: nbre_m= int(arabe,1000) renvoie 2 soit rept("M",nbre_int)
      ensuite
      arabe=arabe mod 1

      a vue de nez, le problème reste le cas des chiffres 4 et 9

      je regarde de mon coté (VBA)

      nota : on ne pourra certainement pas aller au delà de 3999
      Michel
      0