Advertisement
Guest User

amine

a guest
Jul 1st, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.67 KB | None | 0 0
  1. Option Explicit
  2.  
  3.  
  4. '***********
  5. ' Devise=0 aucune
  6. ' =1 dinar algerien
  7. ' =2 Dollar $
  8. ' =3 €uro €
  9. ' Langue=0 Français
  10. ' =1 Belgique
  11. ' =2 Suisse
  12. ' Casse =0 Minuscule
  13. ' =1 Majuscule en début de phrase
  14. ' =2 Majuscule
  15. ' =3 Majuscule en début de chaque mot
  16. ' ZeroCent=0 Ne mentionne pas les cents s'ils sont égal à 0
  17. ' =1 Mentionne toujours les cents
  18. '***********
  19. ' Conversion limitée à 999 999 999 999 999 ou 9 999 999 999 999,99
  20. ' si le nombre contient plus de 2 décimales, il est arrondit à 2 décimales
  21.  
  22.  
  23. Public Function ConvNumberLetter(Nombre As Double, Optional Devise As Byte = 0, _
  24. Optional Langue As Byte = 0, _
  25. Optional Casse As Byte = 0, _
  26. Optional ZeroCent As Byte = 0) As String
  27. Dim dblEnt As Variant, byDec As Byte
  28. Dim bNegatif As Boolean
  29. Dim strDev As String, strCentimes As String
  30.  
  31. If Nombre < 0 Then
  32. bNegatif = True
  33. Nombre = Abs(Nombre)
  34. End If
  35. dblEnt = Int(Nombre)
  36. byDec = CInt((Nombre - dblEnt) * 100)
  37. If byDec = 0 Then
  38. If dblEnt > 999999999999999# Then
  39. ConvNumberLetter = "#TropGrand"
  40. Exit Function
  41. End If
  42. Else
  43. If dblEnt > 9999999999999.99 Then
  44. ConvNumberLetter = "#TropGrand"
  45. Exit Function
  46. End If
  47. End If
  48. Select Case Devise
  49. Case 0
  50. If byDec > 0 Then strDev = " virgule "
  51. Case 1
  52. strDev = " dinars algerien"
  53. If dblEnt >= 1000000 And Right(dblEnt, 6) = "000000" Then strDev = " dinar algerien"
  54. If byDec > 0 Then strCentimes = strCentimes & " Centimes"
  55. End Select
  56. If dblEnt > 1 And Devise <> 0 Then strDev = strDev & " "
  57. strDev = strDev & " "
  58. If dblEnt = 0 Then
  59. ConvNumberLetter = "zéro " & strDev
  60. Else
  61. ConvNumberLetter = ConvNumEnt(CDbl(dblEnt), Langue) & strDev
  62. End If
  63. If byDec = 0 Then
  64. If Devise <> 0 Then
  65. If ZeroCent = 1 Then ConvNumberLetter = ConvNumberLetter & "zéro Cent"
  66. End If
  67. Else
  68. If Devise = 0 Then
  69. ConvNumberLetter = ConvNumberLetter & _
  70. ConvNumDizaine(byDec, Langue, True) & strCentimes
  71. Else
  72. ConvNumberLetter = ConvNumberLetter & _
  73. ConvNumDizaine(byDec, Langue, False) & strCentimes
  74. End If
  75. End If
  76. ConvNumberLetter = Replace(ConvNumberLetter, " ", " ")
  77. If Left(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
  78. Right(ConvNumberLetter, Len(ConvNumberLetter) - 1)
  79. If Right(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
  80. Left(ConvNumberLetter, Len(ConvNumberLetter) - 1)
  81. Select Case Casse
  82. Case 0
  83. ConvNumberLetter = LCase(ConvNumberLetter)
  84. Case 1
  85. ConvNumberLetter = UCase(Left(ConvNumberLetter, 1)) & _
  86. LCase(Right(ConvNumberLetter, Len(ConvNumberLetter) - 1))
  87. Case 2
  88. ConvNumberLetter = UCase(ConvNumberLetter)
  89. Case 3
  90. ConvNumberLetter = Application.WorksheetFunction.Proper(ConvNumberLetter)
  91. If Devise = 3 Then _
  92. ConvNumberLetter = Replace(ConvNumberLetter, "€Uros", "€uros", , , vbTextCompare)
  93. End Select
  94. End Function
  95.  
  96. Private Function ConvNumEnt(Nombre As Double, Langue As Byte)
  97. Dim iTmp As Variant, dblReste As Double
  98. Dim strTmp As String
  99. Dim iCent As Integer, iMille As Integer, iMillion As Integer
  100. Dim iMilliard As Integer, iBillion As Integer
  101.  
  102. iTmp = Nombre - (Int(Nombre / 1000) * 1000)
  103. iCent = CInt(iTmp)
  104. ConvNumEnt = Nz(ConvNumCent(iCent, Langue))
  105. dblReste = Int(Nombre / 1000)
  106. If iTmp = 0 And dblReste = 0 Then Exit Function
  107. iTmp = dblReste - (Int(dblReste / 1000) * 1000)
  108. If iTmp = 0 And dblReste = 0 Then Exit Function
  109. iMille = CInt(iTmp)
  110. strTmp = ConvNumCent(iMille, Langue)
  111. Select Case iTmp
  112. Case 0
  113. Case 1
  114. strTmp = " mille "
  115. Case Else
  116. strTmp = strTmp & " mille "
  117. End Select
  118. If iMille = 0 And iCent > 0 Then ConvNumEnt = "et " & ConvNumEnt
  119. ConvNumEnt = Nz(strTmp) & ConvNumEnt
  120. dblReste = Int(dblReste / 1000)
  121. iTmp = dblReste - (Int(dblReste / 1000) * 1000)
  122. If iTmp = 0 And dblReste = 0 Then Exit Function
  123. iMillion = CInt(iTmp)
  124. strTmp = ConvNumCent(iMillion, Langue)
  125. Select Case iTmp
  126. Case 0
  127. Case 1
  128. strTmp = strTmp & " million "
  129. Case Else
  130. strTmp = strTmp & " millions "
  131. End Select
  132. If iMille = 1 Then ConvNumEnt = "et " & ConvNumEnt
  133. ConvNumEnt = Nz(strTmp) & ConvNumEnt
  134. dblReste = Int(dblReste / 1000)
  135. iTmp = dblReste - (Int(dblReste / 1000) * 1000)
  136. If iTmp = 0 And dblReste = 0 Then Exit Function
  137. iMilliard = CInt(iTmp)
  138. strTmp = ConvNumCent(iMilliard, Langue)
  139. Select Case iTmp
  140. Case 0
  141. Case 1
  142. strTmp = strTmp & " milliard "
  143. Case Else
  144. strTmp = strTmp & " milliards "
  145. End Select
  146. If iMillion = 1 Then ConvNumEnt = "et " & ConvNumEnt
  147. ConvNumEnt = Nz(strTmp) & ConvNumEnt
  148. dblReste = Int(dblReste / 1000)
  149. iTmp = dblReste - (Int(dblReste / 1000) * 1000)
  150. If iTmp = 0 And dblReste = 0 Then Exit Function
  151. iBillion = CInt(iTmp)
  152. strTmp = ConvNumCent(iBillion, Langue)
  153. Select Case iTmp
  154. Case 0
  155. Case 1
  156. strTmp = strTmp & " billion "
  157. Case Else
  158. strTmp = strTmp & " billions "
  159. End Select
  160. If iMilliard = 1 Then ConvNumEnt = "et " & ConvNumEnt
  161. ConvNumEnt = Nz(strTmp) & ConvNumEnt
  162. End Function
  163.  
  164. Private Function ConvNumDizaine(Nombre As Byte, Langue As Byte, bDec As Boolean) As String
  165. Dim TabUnit As Variant, TabDiz As Variant
  166. Dim byUnit As Byte, byDiz As Byte
  167. Dim strLiaison As String
  168.  
  169. If bDec Then
  170. TabDiz = Array("zéro", "", "vingt", "trente", "quarante", "cinquante", _
  171. "soixante", "soixante", "quatre-vingt", "quatre-vingt")
  172. Else
  173. TabDiz = Array("", "", "vingt", "trente", "quarante", "cinquante", _
  174. "soixante", "soixante", "quatre-vingt", "quatre-vingt")
  175. End If
  176. If Nombre = 0 Then
  177. TabUnit = Array("zéro")
  178. Else
  179. TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
  180. "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", _
  181. "seize", "dix-sept", "dix-huit", "dix-neuf")
  182. End If
  183. If Langue = 1 Then
  184. TabDiz(7) = "septante"
  185. TabDiz(9) = "nonante"
  186. ElseIf Langue = 2 Then
  187. TabDiz(7) = "septante"
  188. TabDiz(8) = "huitante"
  189. TabDiz(9) = "nonante"
  190. End If
  191. byDiz = Int(Nombre / 10)
  192. byUnit = Nombre - (byDiz * 10)
  193. strLiaison = "-"
  194. If byUnit = 1 Then strLiaison = " et "
  195. Select Case byDiz
  196. Case 0
  197. strLiaison = " "
  198. Case 1
  199. byUnit = byUnit + 10
  200. strLiaison = ""
  201. Case 7
  202. If Langue = 0 Then byUnit = byUnit + 10
  203. Case 8
  204. If Langue <> 2 Then strLiaison = "-"
  205. Case 9
  206. If Langue = 0 Then
  207. byUnit = byUnit + 10
  208. strLiaison = "-"
  209. End If
  210. End Select
  211. ConvNumDizaine = TabDiz(byDiz)
  212. If byDiz = 8 And Langue <> 2 And byUnit = 0 Then ConvNumDizaine = ConvNumDizaine & "s"
  213. If TabUnit(byUnit) <> "" Then
  214. ConvNumDizaine = ConvNumDizaine & strLiaison & TabUnit(byUnit)
  215. Else
  216. ConvNumDizaine = ConvNumDizaine
  217. End If
  218. End Function
  219.  
  220. Private Function ConvNumCent(Nombre As Integer, Langue As Byte) As String
  221. Dim TabUnit As Variant
  222. Dim byCent As Byte, byReste As Byte
  223. Dim strReste As String
  224.  
  225. TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
  226. "huit", "neuf", "dix")
  227. byCent = Int(Nombre / 100)
  228. byReste = Nombre - (byCent * 100)
  229. strReste = ConvNumDizaine(byReste, Langue, False)
  230. Select Case byCent
  231. Case 0
  232. ConvNumCent = strReste
  233. Case 1
  234. If byReste = 0 Then
  235. ConvNumCent = "cent"
  236. Else
  237. ConvNumCent = "cent " & strReste
  238. End If
  239. Case Else
  240. If byReste = 0 Then
  241. ConvNumCent = TabUnit(byCent) & " cents"
  242. Else
  243. ConvNumCent = TabUnit(byCent) & " cent " & strReste
  244. End If
  245. End Select
  246. End Function
  247.  
  248. Private Function Nz(strNb As String) As String
  249. If strNb <> " zéro" Then Nz = strNb
  250. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement