Chiffre arabe en romain

Résolu
tiplouf2 Messages postés 821 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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