Posez votre question Signaler

Fonction vb6

dutche 77Messages postés 10 décembre 2007Date d'inscription 13 avril 2010Dernière intervention - Dernière réponse le 23 mai 2008 à 12:14
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
Lire la suite 

Fonction vb6 »

3 réponses
Réponse
+0
moins plus
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+.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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à.
Ajouter un commentaire
Ce document intitulé « Fonction vb6 » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Réduire les coûts d'impression dans l'entreprise