Soyez le premier à donner votre avis sur cette source.
Snippet vu 14 663 fois - Téléchargée 10 fois
List<string> lesNombres = new List<string>(); lesNombres.Add(3210987654321.2.ToLettres()); lesNombres.Add(123456789012345.123456789.ToLettres());//ce nombre n'existe pas en double, c'est 123456789012345.12 qui est transmis à la méthode lesNombres.Add(1234.123456789.ToLettres()); lesNombres.Add((-4321.987654321).ToLettres()); lesNombres.Add(1e16.ToLettres());//ce nombre est trop grand lesNombres.Add(0.12345678961.ToLettres());//il y a trop de chiffres dérrière la virgule, le resultat sera arrondi lesNombres.Add(6795432.456.ToLettres(Pays.Belgique, Devise.Euro)); lesNombres.Add(400400400400400.0.ToLettres()); lesNombres.Add(0.4.ToLettres());
using System; using System.Collections.Generic; namespace test { public static class NombreEnLettres { private static string[] jusqueSeize = { "zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize" }; private static string[] dizaines = { "rien", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt"}; private static List<string> resultat; /// <summary> /// Méthode d'extension de la classe double écrivant le nombre en lettres /// </summary> /// <param name="Nombre">Nombre à écrire</param> /// <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> /// <param name="LaDevise">Devise à utliser</param> /// <returns></returns> public static string ToLettres(this double Nombre, Pays LePays = Pays.France, Devise LaDevise = Devise.Aucune) { resultat = new List<string>(); switch (Math.Sign(Nombre)) { case -1: resultat.Add("moins "); Nombre *= -1; break; case 0: return jusqueSeize[0]; } if (Nombre >= 1e16) return "Nombre trop grand"; Int64 partieEntiere = (Int64)(Nombre); double partieDecimale = Nombre - partieEntiere; string[] milliers = { "", "mille", "million", "milliard", "billion", "billiard" }; if (partieEntiere > 0) { List<int> troisChiffres = new List<int>();//liste qui scinde la partie entière en morceaux de 3 chiffres while (partieEntiere > 0) { troisChiffres.Add((int)(partieEntiere % 1000)); partieEntiere /= 1000; } double reste = Nombre - partieEntiere; for (int i = troisChiffres.Count - 1; i >= 0; i--) { int nombre = troisChiffres[i]; if (nombre > 1)//valeurs de milliers au pluriel { resultat.Add(Ecrit3Chiffres(troisChiffres[i], LePays, i==0)); if (i > 1)// mille est invariable et "" ne prend pas de s resultat.Add(milliers[i] + "s"); else if (i == 1) resultat.Add(milliers[i]); } else if (nombre == 1) { if (i != 1) resultat.Add("un");//on dit un million, mais pas un mille resultat.Add(milliers[i]); } //on ne traite pas le 0, car on ne dit pas X millions zéro mille Y. } } else resultat.Add(jusqueSeize[0]); switch(LaDevise) { case Devise.Dollar: resultat.Add("$"); break; case Devise.Euro: resultat.Add("€"); break; case Devise.FrancSuisse: resultat.Add("CHF"); break; } if (LaDevise != Devise.Aucune) { partieDecimale = Math.Round(partieDecimale, 2); if (partieDecimale != 0) { resultat.Add("et"); resultat.Add(Ecrire2Chiffres((int)(partieDecimale * 100), LePays)); resultat.Add("centimes"); } } else { milliers = new[] { "millième", "millionième", "milliardième" }; //avec l'imprécision des nombres à virgules flotantes, 1234562.789 - 1234562 donne 0.78900000010617077 il faut donc compter le nombre de chiffres décimaux du nombre original et arrondir le resultat de la soustraction string[] morceaux = Nombre.ToString("G25").Split(new []{'.',','});//par défaut ToString arrondi à 10^-8, le format G25 oblige à écrire 25 caractères s'ils sont présents soit (au pire) 15 avant la virgule, la virgule et 9 après, split permet de découper le string obtenu if (morceaux.Length == 2)//il y a une partie décimale { resultat.Add("et"); int lenghtPartieDecimale = morceaux[1].Length; if (lenghtPartieDecimale > 9) lenghtPartieDecimale = 9;//on se limite à 10^-9 partieDecimale = Math.Round(partieDecimale, lenghtPartieDecimale); int i = 0; while (partieDecimale > 0) { partieDecimale = partieDecimale * 1000; int valeur = (int)partieDecimale; lenghtPartieDecimale -= 3; if (lenghtPartieDecimale < 0) lenghtPartieDecimale = 0; partieDecimale = Math.Round(partieDecimale - valeur, lenghtPartieDecimale); if (valeur != 0) { resultat.Add(Ecrit3Chiffres(valeur, LePays, false)); if (valeur > 1) resultat.Add(milliers[i++] + "s"); else resultat.Add(milliers[i++]); } } } } return string.Join(" ", resultat); } /// <summary> /// Ecrit les nombres de 0 à 999 /// </summary> /// <param name="Nombre">Nombre à écrire</param> /// <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> /// <param name="RegleDuCent">pour 400 cent prend un s alors que pour 400 000 ou 0.400 non </param> private static string Ecrit3Chiffres(int Nombre, Pays LePays, bool RegleDuCent) { if (Nombre == 100) return "cent"; if(Nombre < 100) return Ecrire2Chiffres(Nombre, LePays); int centaine = Nombre / 100; int reste = Nombre % 100; if (reste == 0) if (RegleDuCent)//Cent prend un s quand il est multiplié et non suivi d'un nombre, comme le cas de 100 est déjà traité on est face à un multiple return jusqueSeize[centaine] + " cents"; else return jusqueSeize[centaine] + " cent";// par contre s'il est suivi de mille, millions, millièmes etc... pas de s if (centaine == 1) return "cent " + Ecrire2Chiffres(reste, LePays);//on ne dit pas un cent X, mais cent X return jusqueSeize[centaine] + " cent " + Ecrire2Chiffres(reste, LePays); } /// <summary> /// Ecrit les nombres de 0 à 99 /// </summary> /// <param name="Nombre">Nombre à écrire</param> /// <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> /// <returns></returns> private static string Ecrire2Chiffres(int Nombre, Pays LePays) { if (LePays != Pays.France) { dizaines[7] = "septante"; dizaines[9] = "nonante"; } if (LePays == Pays.Suisse) dizaines[8] = "huitante"; if (Nombre < 17) return jusqueSeize[Nombre]; switch (Nombre)//cas particuliers de 71, 80 et 81 { case 71://en France 71 prend un et if (LePays == Pays.France) return "soixante et onze"; break; case 80://en France et Belgique le vingt prend un s if (LePays == Pays.Suisse) return dizaines[8]; else return dizaines[8] + "s"; case 81://en France et Belgique il n'y a pas de et if (LePays != Pays.Suisse) return dizaines[8] + "-un"; break; } int dizaine = Nombre / 10; int unite = Nombre % 10; string laDizaine = dizaines[dizaine]; if (LePays == Pays.France && (dizaine == 7 || dizaine == 9)) { dizaine--; unite += 10; } switch (unite) { case 0: return laDizaine; case 1: return laDizaine + " et un"; case 17://pour 77 à 79 et 97 à 99 case 18: case 19: unite = unite % 10; return laDizaine + "-dix-" + jusqueSeize[unite]; default: return laDizaine + "-" + jusqueSeize[unite]; } } } public enum Pays { France, Belgique, Suisse } public enum Devise { Aucune, Euro, FrancSuisse, Dollar } }
Dim lesNombres As New List(Of String)() Dim nombreExemple As Double = 123.456 lesNombres.Add(nombreExemple.ToLettres()) 'on peut appliquer la méthode d'extension sur une variable de type double lesNombres.Add(3210987654321.2.ToLettres()) 'on peut aussi l'appliquer directement sur un nombre (Attention, il faut une virgule, sinon le nombre est pris comme un entier et la méthode n'étend pas les entiers) lesNombres.Add(123456789012345.12.ToLettres()) 'ce nombre n'existe pas en double, c'est 123456789012345.12 qui est transmis à la méthode lesNombres.Add(1234.123456789.ToLettres()) lesNombres.Add((-4321.987654321).ToLettres()) lesNombres.Add(1.0E+16.ToLettres()) 'ce nombre est trop grand lesNombres.Add(0.12345678961.ToLettres()) 'il y a trop de chiffres dérrière la virgule, le resultat sera arrondi lesNombres.Add(6795432.456.ToLettres(Pays.Belgique, Devise.Euro)) lesNombres.Add(400400400400400.0.ToLettres()) lesNombres.Add(0.4.ToLettres())
Imports System Imports System.Collections.Generic Public Module NombreEnLettres Private jusqueSeize() As String = {"zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize"} Private dizaines() As String = {"rien", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt"} Private resultat As List(Of String) ''' <summary> ''' Méthode d'extension de la classe double écrivant le nombre en lettres ''' </summary> ''' <param name="Nombre">Nombre à écrire</param> ''' <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> ''' <param name="LaDevise">Devise à utliser</param> ''' <returns></returns> <System.Runtime.CompilerServices.Extension> _ Public Function ToLettres(ByVal Nombre As Double, Optional ByVal LePays As Pays = Pays.France, Optional ByVal LaDevise As Devise = Devise.Aucune) As String resultat = New List(Of String)() Select Case Math.Sign(Nombre) Case -1 resultat.Add("moins ") Nombre *= -1 Case 0 Return jusqueSeize(0) End Select If Nombre >= 1.0E+16 Then Return "Nombre trop grand" End If Dim partieEntiere As Int64 = CLng(Math.Floor(Nombre)) Dim partieDecimale As Double = Nombre - partieEntiere Dim milliers() As String = {"", "mille", "million", "milliard", "billion", "billiard"} If partieEntiere > 0 Then Dim troisChiffres As New List(Of Integer)() 'liste qui scinde la partie entière en morceaux de 3 chiffres Do While partieEntiere > 0 troisChiffres.Add(CInt(Math.Floor(partieEntiere Mod 1000))) partieEntiere \= 1000 Loop Dim reste As Double = Nombre - partieEntiere For i As Integer = troisChiffres.Count - 1 To 0 Step -1 Dim leNombre As Integer = troisChiffres(i) If leNombre > 1 Then 'valeurs de milliers au pluriel resultat.Add(Ecrit3Chiffres(troisChiffres(i), LePays, i = 0)) 'la régle du cent ne s'applique que pour i = 1 If i > 1 Then ' mille est invariable et "" ne prend pas de s resultat.Add(milliers(i) & "s") ElseIf i = 1 Then resultat.Add(milliers(i)) End If ElseIf leNombre = 1 Then If i <> 1 Then resultat.Add("un") 'on dit un million, mais pas un mille resultat.Add(milliers(i)) End If 'on ne traite pas le 0, car on ne dit pas X millions zéro mille Y. Next i Else resultat.Add(jusqueSeize(0)) End If Select Case LaDevise Case Devise.Dollar resultat.Add("$") Case Devise.Euro resultat.Add("€") Case Devise.FrancSuisse resultat.Add("CHF") End Select If LaDevise <> Devise.Aucune Then partieDecimale = Math.Round(partieDecimale, 2) If partieDecimale <> 0 Then resultat.Add("et") resultat.Add(Ecrire2Chiffres(CInt(Math.Floor(partieDecimale * 100)), LePays)) resultat.Add("centimes") End If Else milliers = {"millième", "millionième", "milliardième"} 'avec l'imprécision des nombres à virgules flotantes, 1234562.789 - 1234562 donne 0.78900000010617077 il faut donc compter le nombre de chiffres décimaux du nombre original et arrondir le resultat de la soustraction Dim morceaux() As String = Nombre.ToString("G25").Split({"."c, ","c}) 'par défaut ToString arrondi à 10^-8, le format G25 oblige à écrire 25 caractères s'ils sont présents soit (au pire) 15 avant la virgule, la virgule et 9 après, split permet de découper le string obtenu If morceaux.Length = 2 Then 'il y a une partie décimale resultat.Add("et") Dim lenghtPartieDecimale As Integer = morceaux(1).Length If lenghtPartieDecimale > 9 Then lenghtPartieDecimale = 9 'on se limite à 10^-9 End If partieDecimale = Math.Round(partieDecimale, lenghtPartieDecimale) Dim i As Integer = 0 Do While partieDecimale > 0 partieDecimale = partieDecimale * 1000 Dim valeur As Integer = CInt(Math.Floor(partieDecimale)) lenghtPartieDecimale -= 3 If lenghtPartieDecimale < 0 Then lenghtPartieDecimale = 0 End If partieDecimale = Math.Round(partieDecimale - valeur, lenghtPartieDecimale) If valeur <> 0 Then resultat.Add(Ecrit3Chiffres(valeur, LePays, False)) '0.400 ne prend pas d's car il est suivi de millièmes If valeur > 1 Then resultat.Add(milliers(i) & "s") i += 1 Else resultat.Add(milliers(i)) i += 1 End If End If Loop End If End If Return String.Join(" ", resultat) End Function ''' <summary> ''' Ecrit les nombres de 0 à 999 ''' </summary> ''' <param name="Nombre">Nombre à écrire</param> ''' <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> '''<param name="RegleDuCent">pour 400 cent prend un s alors que pour 400 000 ou 0.400 non </param> Private Function Ecrit3Chiffres(ByVal Nombre As Integer, ByVal LePays As Pays, ByVal RegleDuCent As Boolean) As String If Nombre = 100 Then Return "cent" End If If Nombre < 100 Then Return Ecrire2Chiffres(Nombre, LePays) End If Dim centaine As Integer = Nombre \ 100 Dim reste As Integer = Nombre Mod 100 If reste = 0 Then If RegleDuCent Then 'Cent prend un s quand il est multiplié et non suivi d'un nombre, comme le cas de 100 est déjà traité on est face à un multiple Return jusqueSeize(centaine) & " cents" Else Return jusqueSeize(centaine) & " cent" 'pour 400 000 cent ne prend pas d's End If End If If centaine = 1 Then Return "cent " & Ecrire2Chiffres(reste, LePays) 'on ne dit pas un cent X, mais cent X End If Return jusqueSeize(centaine) & " cent " & Ecrire2Chiffres(reste, LePays) End Function ''' <summary> ''' Ecrit les nombres de 0 à 99 ''' </summary> ''' <param name="Nombre">Nombre à écrire</param> ''' <param name="LePays">Pays d'utilisation, pour spécificitées régionnales</param> ''' <returns></returns> Private Function Ecrire2Chiffres(ByVal Nombre As Integer, ByVal LePays As Pays) As String If LePays <> Pays.France Then dizaines(7) = "septante" dizaines(9) = "nonante" End If If LePays = Pays.Suisse Then dizaines(8) = "huitante" End If If Nombre < 17 Then Return jusqueSeize(Nombre) End If Select Case Nombre 'cas particuliers de 71, 80 et 81 Case 71 'en France 71 prend un et If LePays = Pays.France Then Return "soixante et onze" End If Case 80 'en France et Belgique le vingt prend un s If LePays = Pays.Suisse Then Return dizaines(8) Else Return dizaines(8) & "s" End If Case 81 'en France et Belgique il n'y a pas de et If LePays <> Pays.Suisse Then Return dizaines(8) & "-un" End If End Select Dim dizaine As Integer = Nombre \ 10 Dim unite As Integer = Nombre Mod 10 Dim laDizaine As String = dizaines(dizaine) If LePays = Pays.France AndAlso (dizaine = 7 OrElse dizaine = 9) Then dizaine -= 1 unite += 10 End If Select Case unite Case 0 Return laDizaine Case 1 Return laDizaine & " et un" Case 17, 18, 19 'pour 77 à 79 et 97 à 99 unite = unite Mod 10 Return laDizaine & "-dix-" & jusqueSeize(unite) Case Else Return laDizaine & "-" & jusqueSeize(unite) End Select End Function End Module Public Enum Pays France Belgique Suisse End Enum Public Enum Devise Aucune Euro FrancSuisse Dollar End Enum
'code de test Sub test() ActiveSheet.Range("A1") = ToLettres(123.456) ActiveSheet.Range("A2") = ToLettres(3210987654321.2) ActiveSheet.Range("A3") = ToLettres(123456789012345#) ActiveSheet.Range("A4") = ToLettres(1234.123456789) ActiveSheet.Range("A5") = ToLettres(-4321.987654321) ActiveSheet.Range("A6") = ToLettres(1E+16) 'ce nombre est trop grand ActiveSheet.Range("A7") = ToLettres(0.12345678961) 'il y a trop de chiffres dérrière la virgule, le resultat sera arrondi ActiveSheet.Range("A8") = ToLettres(6795432.456, Belgique, Euro) 'pour les options, on peut mettre les "mots clés" ActiveSheet.Range("A9") = ToLettres(400400400, 0, 0) 'pour les options, on peut mettre les chiffres correspondants aux "mots clés" ActiveSheet.Range("A10") = ToLettres(0.4) End Sub
Option Explicit Option Base 0 Public Enum Pays France Belgique Suisse End Enum Public Enum Devise Aucune Euro FrancSuisse Dollar End Enum Dim jusqueSeize As Variant Dim dizaines As Variant Dim resultat() As String Dim troisChiffres() As Integer 'tableau qui scinde la partie entière en morceaux de 3 chiffres 'Fonction écrivant le nombre en lettres 'Nombre est le nombre à écrire 'LePays est le pays d'utilisation, pour spécificitées régionnales. Il s'agit d'un énumérable définit plus haut, les valeurs possiblis sont: ' France ou 0 ' Belgique ou 1 ' Suisse ou 2 'LaDevise la devise à utliser le cas échéant. Les valeurs possibles sont: ' Aucune ou 0 ' Euro ou 1 ' FrancSuisse ou 2 ' Dollar ou 3 Public Function ToLettres(ByVal Nombre As Double, Optional ByVal LePays As Pays = Pays.France, Optional ByVal LaDevise As Devise = Devise.Aucune) As String ReDim resultat(0) ReDim troisChiffres(0) jusqueSeize = Array("zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize") Select Case Sgn(Nombre) Case -1 AjouteResultat "moins " Nombre = Nombre * -1 Case 0 ToLettres = jusqueSeize(0) Exit Function End Select If Nombre >= 2147483647 Then 'j'utilise un long pour la partie entière et c'est la valeur maximun ToLettres = "Nombre trop grand" Exit Function End If dizaines = Array("rien", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt") Dim PartieEntiere As Long PartieEntiere = CLng(Fix(Nombre)) Dim partieDecimale As Double partieDecimale = Nombre - PartieEntiere Dim milliers As Variant milliers = Array("", "mille", "million", "milliard", "billion", "billiard") If PartieEntiere > 0 Then Do While PartieEntiere > 0 AjouteTroisChiffres CInt(Fix(PartieEntiere Mod 1000)) PartieEntiere = PartieEntiere \ 1000 Loop Dim reste As Double reste = Nombre - PartieEntiere Dim i As Integer For i = UBound(troisChiffres) - 1 To 0 Step -1 Dim leNombre As Integer leNombre = troisChiffres(i) If leNombre > 1 Then 'valeurs de milliers au pluriel AjouteResultat Ecrit3Chiffres(troisChiffres(i), LePays, i = 0) 'pour 400 000, cent ne prend pas de S alors que pour 400 si If i > 1 Then ' mille est invariable et "" ne prend pas de s AjouteResultat milliers(i) & "s" ElseIf i = 1 Then AjouteResultat milliers(i) End If ElseIf leNombre = 1 Then If i <> 1 Then 'on dit un million, mais pas un mille AjouteResultat "un" End If AjouteResultat milliers(i) End If 'on ne traite pas le 0, car on ne dit pas X millions zéro mille Y. Next i Else AjouteResultat jusqueSeize(0) End If Select Case LaDevise Case Devise.Dollar AjouteResultat "$" Case Devise.Euro AjouteResultat "€" Case Devise.FrancSuisse AjouteResultat "CHF" End Select If LaDevise <> Devise.Aucune Then partieDecimale = Round(partieDecimale, 2) If partieDecimale <> 0 Then AjouteResultat "et" AjouteResultat Ecrire2Chiffres(CInt(Fix(partieDecimale * 100)), LePays) AjouteResultat "centimes" End If Else milliers = Array("millième", "millionième", "milliardième") 'avec l'imprécision des nombres à virgules flotantes, 1234562.789 - 1234562 donne 0.78900000010617077 il faut donc compter le nombre de chiffres décimaux du nombre original et arrondir le resultat de la soustraction Dim morceaux() As String morceaux = Split(CStr(Nombre), ",") 'par défaut ToString arrondi à 10^-8, le format G25 oblige à écrire 25 caractères s'ils sont présents soit (au pire) 15 avant la virgule, la virgule et 9 après, split permet de découper le string obtenu If UBound(morceaux) = 1 Then 'il y a une partie décimale AjouteResultat "et" Dim lenghtPartieDecimale As Integer lenghtPartieDecimale = Len(morceaux(1)) If lenghtPartieDecimale > 9 Then lenghtPartieDecimale = 9 'on se limite à 10^-9 End If partieDecimale = Round(partieDecimale, lenghtPartieDecimale) i = 0 Do While partieDecimale > 0 partieDecimale = partieDecimale * 1000 Dim valeur As Integer valeur = CInt(Fix(partieDecimale)) lenghtPartieDecimale = lenghtPartieDecimale - 3 If lenghtPartieDecimale < 0 Then lenghtPartieDecimale = 0 End If partieDecimale = Round(partieDecimale - valeur, lenghtPartieDecimale) If valeur <> 0 Then AjouteResultat Ecrit3Chiffres(valeur, LePays, False) '0.400 cent ne prend pas d's car il y a millième après If valeur > 1 Then AjouteResultat milliers(i) & "s" i = i + 1 Else AjouteResultat milliers(i) i = i + 1 End If End If Loop End If End If ToLettres = Trim(Join(resultat, " ")) End Function 'Ecrit les nombres de 0 à 999 Private Function Ecrit3Chiffres(ByVal Nombre As Integer, ByVal LePays As Pays, RegleDuCent As Boolean) As String If Nombre = 100 Then Ecrit3Chiffres = "cent" Exit Function End If If Nombre < 100 Then Ecrit3Chiffres = Ecrire2Chiffres(Nombre, LePays) Exit Function End If Dim centaine As Integer centaine = Nombre \ 100 Dim reste As Integer reste = Nombre Mod 100 If reste = 0 Then 'Cent prend un s quand il est multiplié et non suivi d'un mot, comme le cas de 100 est déjà traité on est face à un multiple If RegleDuCent = True Then Ecrit3Chiffres = jusqueSeize(centaine) & " cents" Else 'pour 400 000 par exemple cent ne prend pas le s Ecrit3Chiffres = jusqueSeize(centaine) & " cent" End If Exit Function End If If centaine = 1 Then Ecrit3Chiffres = "cent " & Ecrire2Chiffres(reste, LePays) 'on ne dit pas un cent X, mais cent X Exit Function End If Ecrit3Chiffres = jusqueSeize(centaine) & " cent " & Ecrire2Chiffres(reste, LePays) End Function 'Ecrit les nombres de 0 à 99 Private Function Ecrire2Chiffres(ByVal Nombre As Integer, ByVal LePays As Pays) As String If LePays <> Pays.France Then dizaines(7) = "septante" dizaines(9) = "nonante" End If If LePays = Pays.Suisse Then dizaines(8) = "huitante" End If If Nombre < 17 Then Ecrire2Chiffres = jusqueSeize(Nombre) Exit Function End If Select Case Nombre 'cas particuliers de 71, 80 et 81 Case 71 'en France 71 prend un et If LePays = Pays.France Then Ecrire2Chiffres = "soixante et onze" Exit Function End If Case 80 'en France et Belgique le vingt prend un s If LePays = Pays.Suisse Then Ecrire2Chiffres = dizaines(8) Exit Function Else Ecrire2Chiffres = dizaines(8) & "s" Exit Function End If Case 81 'en France et Belgique il n'y a pas de et If LePays <> Pays.Suisse Then Ecrire2Chiffres = dizaines(8) & "-un" Exit Function End If End Select Dim dizaine As Integer dizaine = Nombre \ 10 Dim unite As Integer unite = Nombre Mod 10 Dim laDizaine As String laDizaine = dizaines(dizaine) If LePays = France And (dizaine = 7 Or dizaine = 9) Then dizaine = dizaine - 1 unite = unite + 10 End If Select Case unite Case 0 Ecrire2Chiffres = laDizaine Case 1 Ecrire2Chiffres = laDizaine & " et un" Case 17, 18, 19 'pour 77 à 79 et 97 à 99 unite = unite Mod 10 Ecrire2Chiffres = laDizaine & "-dix-" & jusqueSeize(unite) Case Else Ecrire2Chiffres = laDizaine & "-" & jusqueSeize(unite) End Select End Function 'Ajoute une valeur au tableau Sub AjouteResultat(ByVal Texte As String) If IsArray(resultat) Then Dim taille As Integer taille = UBound(resultat) + 1 Else taille = 1 End If ReDim Preserve resultat(taille) resultat(taille - 1) = Texte End Sub 'ajoute une valeur au tableau Sub AjouteTroisChiffres(ByVal Entier As Integer) If IsArray(troisChiffres) Then Dim taille As Integer taille = UBound(troisChiffres) + 1 Else taille = 1 End If ReDim Preserve troisChiffres(taille) troisChiffres(taille - 1) = Entier End Sub
14 mars 2017 à 20:50
Il y n'a une ligne à changer.
Le String.Join de l'époque ne prenait pas de liste en paramètre, il faut donc changer la liste en tableau.
devient
D'un autre coté, 2008 c'est obsolète même pour XP, VS2010 et la Framework 4.0 fonctionnent sur XP et tu n'aurais pas eu ce bug.
14 mars 2017 à 12:51
c'est possible que j'utilise quelque chose qui n'existait pas en Framework 3.
Mais sans préciser quelles sont les erreurs et ou elles apparaissent, je ne vais rien pouvoir y faire....
14 mars 2017 à 12:34
Modifié par Whismeril le 9/03/2017 à 09:20
9 mars 2017 à 07:36
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.