Error #NAME avec une Macro function
Bonjour à tous,
J'ai un ami qui a un problème sur une de ses macro mais je n'ai pas réussi à l'aider donc je partage ici:
Le probleme est le suivant: " After exporting several sheets or just one sheet to PDF the macro function "spellnumber" gets error #NAME - Important to mention that while doing the exporting Acrobat PDFMaker needs to save the file before continuing, on which i click YES to proceed getting my sheets (which we use for documents) exported to PDF. Then after closing the Excel and reopening again the function works again, but this can be very annoying. how to fix this, what is causing this? Macro's are enabled" .
Je ne peux pas partager l'excel car il comporte des infos confidentiels mais l'objectif de la formule est de convertir un montant en lettre:
Option Explicit
Function SpellNumber(ByVal MyNumber, Optional MyCurrency As String = "")
Dim Dollars, cents, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = " Thousand "
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
Dim str_amount, str_amounts
Dim str_cent, str_cents
Select Case UCase(MyCurrency)
Case "EUR"
str_amount = "Euro"
str_amounts = "Euros"
str_cent = "Cent"
str_cents = "Cents"
Case Else:
str_amount = "Dollar"
str_amounts = "Dollars"
str_cent = "Cent"
str_cents = "Cents"
End Select
Select Case Dollars
Case ""
Dollars = "Zero " & str_amounts
Case "One"
Dollars = "One " & str_amount
Case Else
Dollars = Dollars & " " & str_amounts
End Select
Select Case cents
Case ""
cents = " and Zero " & str_cents
Case "One"
cents = " and One " & str_cent
Case Else
cents = " and " & cents & " " & str_cents
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.
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
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
' 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 Then ' If value between 10-19...
Select Case Val(TensText)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else ' If value between 20-99...
Select Case Val(Left(TensText, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
Result = Result & GetDigit _
(Right(TensText, 1)) ' Retrieve ones place.
End If
GetTens = Result
End Function
' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = "One"
Case 2: GetDigit = "Two"
Case 3: GetDigit = "Three"
Case 4: GetDigit = "Four"
Case 5: GetDigit = "Five"
Case 6: GetDigit = "Six"
Case 7: GetDigit = "Seven"
Case 8: GetDigit = "Eight"
Case 9: GetDigit = "Nine"
Case Else: GetDigit = ""
End Select
End FunctionBon après-midi à tous
Bonjour BILLY walsh
Pour moi ce n'est pas ce code qui pose problème, il ne fait que transformer un nombre en texte
#NAME veut dire qu'il ne reconnait pas la fonction
Sans le code entier, cela va être compliqué
A+
Bonjour,
Hahaha merci pour votre message. Le code ci-dessus est justement le code entier...
Re,
Je demandais ça, car comment est fait l'export en PDF
Car à l'export, je n'ai pas de problème
A+
Export en PDF en cliquant sur files - > Save as PDF.
Bonjour,
Donc nous ne pourrons pas t'aider plus toi et ton ami
Je n'ai pas ce problème lorsque je le fais de mon côté, j'ai également Acrobat PDFmaker
A+
Hello Bruno,
En faite après avoir exporte en PDF, toutes les macros de mon fichier ne fonctionne plus.
Ca doit un être un problème de setting.
Merci d'avoir regarde mon probleme et bonne semaine a vous tous.
PH
Re,
Je reviens sur ce que tu nous indique ici https://forum.excel-pratique.com/s/goto/1120807
Et j'ai peur d'avoir compris
Si ton ami fait vraiment Fichier -> Enregistrer sous PDF
Ton fichier Excel n'en n'est plus un, mais est devenu un fichier PDF
Il faut faire Fichier -> Exporter -> Créer un document PDF
A+