Chiffre arabe en romain

Résolu
tiplouf2 Messages postés 703 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 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



A voir également:

3 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Contributeur Dernière intervention   1 191
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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