Rechercher : dans
Par :

Fonction vb6

Dernière réponse le 23 mai 2008 à 12:14:01 dutche, le 22 mai 2008 à 19:46:16 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un souci avec une fonction vb6 que j'ai créer dans crystal report sensée convertir un nombre en lettre.
Mais le problème est que lorsque j'exécute la fonction il ya un bug: pour les nombres <1000 ça fonctionne
mais lorsque le nbre est >1000 ex: 1 000 il me renvoit dix mille, 10 000 il me renvoit cent mille.
Aidez moi à trouver mon erreur.
NB: ce programme fonction bien (en remplaçant tmpBuff = tmpBuff & Milliers(nPosition / 3 ) & " " par tmpBuff = tmpBuff & Milliers(nPosition / 3 +1) & " " ) lorsque je le fais tourner sur Vb.net
voici ma fonction:

Function NbVersTexte(ValNum As Double) As String
Dim Unites(10) As String 'tableau des unités
Dim Dixaines(10) As String 'tableau de dixaines
Dim LesDixaines(10) As String 'tableau des dixaines
Dim Milliers(5) As String 'tableau des millièmes

Dim i As number
Dim nPosition As number 'position du chiffre dans le nombre
Dim ValNb As number 'valeur en nombre de l'extrait de strTemp
Dim LesZeros As Boolean 'le nombre de zero après les nombres
Dim strResultat As String 'valeur de retour de la fonction
Dim strTemp As String 'variable de conservation temporaire du nbre converti en string
Dim tmpBuff As String

Unites(1) = "zero"
Unites(2) = "un"
Unites(3) = "deux"
Unites(4) = "trois"
Unites(5) = "quatre"
Unites(6) = "cinq"
Unites(7) = "six"
Unites(8) = "sept"
Unites(9) = "huit"
Unites(10) = "neuf"

Dixaines(1) = "dix"
Dixaines(2) = "onze"
Dixaines(3) = "douze"
Dixaines(4) = "treize"
Dixaines(5) = "quatorze"
Dixaines(6) = "quinze"
Dixaines(7) = "seize"
Dixaines(8) = "dix-sept"
Dixaines(9) = "dix-huit"
Dixaines(10) = "dix-neuf"

LesDixaines(1) = ""
LesDixaines(2) = "dix"
LesDixaines(3) = "vingt"
LesDixaines(4) = "trente"
LesDixaines(5) = "quarante"
LesDixaines(6) = "cinquante"
LesDixaines(7) = "soixante"
LesDixaines(8) = "soixante-dix"
LesDixaines(9) = "quatre-vingt"
LesDixaines(10) = "quatre-vingt-dix"

Milliers(1) = ""
Milliers(2) = "mille"
Milliers(3) = "million"
Milliers(4) = "millard"
Milliers(5) = "mille"


strTemp = CStr(Int(ValNum))

For i = Len(strTemp) To 1 Step -1
ValNb = Val(Mid(strTemp, i, 1))
'Mid$ renvoie l'extrait de strTemp qui commence au caractère numéro i
'et d'une longueur de 1 caractères
' Val convertit les caractères d'une chaîne en nombre

nPosition = (Len(strTemp) - i) + 1
Select Case (nPosition Mod 3)
Case 1
LesZeros = False
If i = 1 Then
If ValNb >= 1 Then
tmpBuff = Unites(ValNb + 1) & " "
Else
tmpBuff = ""
End If
ElseIf Mid(strTemp, i - 1, 1) = "1" Then
tmpBuff = Dixaines(ValNb + 1) & " "
i = i - 1
ElseIf Mid(strTemp, i - 1, 1) = "9" Then
tmpBuff = LesDixaines(9) & " " & Dixaines(ValNb + 1) & " "
i = i - 1
ElseIf Mid(strTemp, i - 1, 1) = "7" Then
tmpBuff = LesDixaines(7) & " " & Dixaines(ValNb + 1) & " "
i = i - 1
ElseIf ValNb > 0 Then
tmpBuff = Unites(ValNb + 1) & " "
Else
LesZeros = True
If i > 1 Then
If Mid(strTemp, i - 1, 1) <> "0" Then
LesZeros = False
End If
End If
If i > 2 Then
If Mid(strTemp, i - 2, 1) <> "0" Then
LesZeros = False
End If
End If
tmpBuff = ""
End If
If LesZeros = False And nPosition > 1 Then
tmpBuff = tmpBuff & Milliers(nPosition / 3 ) & " "
End If
strResultat = tmpBuff & strResultat
Case 2
If ValNb > 0 Then
strResultat = LesDixaines(ValNb + 1) & " " & strResultat
End If
Case 0
If ValNb > 0 Then
If ValNb > 1 Then
strResultat = Unites(ValNb + 1) & " cent " & strResultat
Else
strResultat = "cent " & strResultat
End If
End If
End Select
Next i

If Len(strResultat) > 0 Then
strResultat = UCase(Left(strResultat, 1)) & Mid(strResultat, 2)
End If


NbVersTexte = strResultat
End Function

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Fonction vb6 » dans :
Faire fonctionner une application Windows sous Linux avec Wine VoirWine est un logiciel permettant de faire fonctionner certaines applications Windows sous Linux. Contrairement à VMWare ou VirtualBox, Wine n'émule pas un PC complet, mais seulement les API Win32 (appels système Windows). L'émulation n'est pas...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
Gérer les fonctionnalités sous vista VoirSous Vista, comme il est possible sous Xp, vous pouvez activer ou désactiver certaines fonctionnalités suivant si vous utilisez les jeux, une imprimante, etc... Accéder aux fonctionnalités de Windows Fonctionnalités Accéder aux...
Javascript - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...

1

amigo, le 22 mai 2008 à 20:13:48

Bonjour,

Le type Number n'existe pas en VB6, il faudra remplacer par Integer.

Dim i As Integer
Dim nPosition As Integer 'position du chiffre dans le nombre
Dim ValNb As Integer 'valeur en nombre de l'extrait de strTemp 


Ensuite, ajoute ces instructions qui suppriment les séparateur de milliers ( "1 000" -> "1000" )

strTemp = CStr(Int(ValNum)) 
i = InStr(1, strTemp, " ")
While i > 0
strTemp = Left(strTemp, i - 1) & Right(strTemp, Len(strTemp) - i)
i = InStr(1, strTemp, " ")
Wend


A+.

Répondre à amigo

2

dutche, le 23 mai 2008 à 11:55:27

Merci pour ta reponse.
Mais je crois que j'ai mal utilisé le mot vb6 c'est du basic que crystal report utilise pour la création de ces fonctions. Il ne reconnais pas le type Integer.

Répondre à dutche

3

 dutche, le 23 mai 2008 à 12:14:01

J'ai bien essayé avec ton code pour supprimer les zeros amigo mais ça ne marche pas. Le problème ne se situe peut être pas là.

Répondre à dutche
Collection CommentÇaMarche.net