Chiffre arabe en romain

Résolu/Fermé
tiplouf2 Messages postés 703 Date d'inscription samedi 23 août 2008 Statut Membre Dernière intervention 15 mai 2017 - 26 oct. 2012 à 09:54
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 oct. 2012 à 17:52
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



A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
26 oct. 2012 à 17:54
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 29/10/2012 à 16:29
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 29/10/2012 à 17:31
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 oct. 2012 à 17:52
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
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 oct. 2012 à 10:20
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 26/10/2012 à 12:01
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