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
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
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.