Probleme avec la fonction OR
Salut , je suis nouveau sur ce forum et j'ai un petit probleme avec une fonction de VBA .
Pour faire une histoire courte .. J'ai prit un editeur de cheque anglais et je les traduit en francais mais les nombre francais et anglais ne sont pas prononcer de la meme facon. Donc avant la commande etait If Val(Left(TensText, 1)) = 1 Then et tous allais super bien . Mais maintenant avec la commande que j'ai modifier sa va bien a 95%.
Avez vous un subtitue a 1 Or 7 Or 9 ?? Merci
' Converts a number from 10 to 99 into text.
Function GetTens(TensText)
Dim Result As String
Result = "" ' Null out the temporary function value.
If Val(Left(TensText, 1)) = 1 Or 7 And 9 Then ' If value between 10-19...
Select Case Val(TensText)
Case 10: Result = "Dix"
Case 11: Result = "Onze"
Case 12: Result = "Douze"
Case 13: Result = "Treize"
Case 14: Result = "Quatorze"
Case 15: Result = "Quinze"
........
Bonjour,
Je te propose deux solutions :
Utiliser une liste Array
Dim nombre As Variant
Dim i as Byte
nombre = Array(1, 7, 9)
For i = 0 To UBound(nombre)
If Val(Left(TensText, 1)) = nombre(i) Then
Select case ...
End Select
Exit For
End If
Next iSi tu souhaites éviter l'Array, mettre le résultat de ton calcul dans une variable avant de la tester
Dim x as byte
x = Val(Left(TensText, 1))
If x = 1 Or x = 7 Or x = 9 ThenMerci Beaucoup j'ai essayer la deuxieme solution et cela fonction tres bien !
Une autre petite question ... avec cette fonction sur le cheque sa imprime UN CENT , DEUX CENTS .... Es-ce possible de modifier pour qu'il soit ecrit CENT seulement sans le UN devant ?
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Convert the hundreds place.
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Cents "
End If
' Convert the tens and ones place.
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function
Comme çà par exemple ?
' Convert the hundreds place.
Dim hundred As Byte
hundred = Left(MyNumber, 1)
Select Case hundred
Case 0
Case 1: Result = " Cent "
Case Else: Result = hundred & " Cents "
End SelectOui avec une petite modif cela fonctionne tres bien voici la modif
Dim hundred As Byte
' Convert the hundreds place.
hundred = Left(MyNumber, 1)
If hundred <> "0" Then
Select Case hundred
Case 1: Result = " Cent "
Case Else: Result = GetDigit(Mid(MyNumber, 1, 1)) & " Cents "
End Select
End If
MERCI Beaucoup de votre temps et rapidité.
Mathieu
Encore le meme probleme mais avec les MILLEs maintenant . J'aimerais que un ne s'affiche pas devant MILLE .. mais devant milion et le reste oui
Function SpellNumber(ByVal MyNumber)
Dim Dollars, Cents, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = " Mille "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' String representation of amount.
MyNumber = Trim(Str(MyNumber))
' Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, ".")
' Convert cents and set MyNumber to dollar amount.
If DecimalPlace > 0 Then
Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
"00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
Temp = GetHundreds(Right(MyNumber, 3))
If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop
Select Case Dollars
Case ""
Dollars = "Zero "
Case "One"
Dollars = "Un "
Case Else
Dollars = Dollars & " Dollars "
End Select
Select Case Cents
Case ""
Cents = " et zero sous"
Case "One"
Cents = " et un sous"
Case Else
Cents = "et " & Cents & " sous"
End Select
SpellNumber = Dollars & Cents
End Function
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Convert the hundreds place.
Dim hundred As Byte
hundred = Left(MyNumber, 1)
If hundred <> "0" Then
Select Case hundred
Case 1: Result = " Cent "
Case Else: Result = GetDigit(Mid(MyNumber, 1, 1)) & " Cents "
End Select
End If
' Convert the tens and ones place.
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function