0
votes

Mettre en forme un nombre avec un nombre variable de chiffres dans VBA

Voici une question "simple" (je pense):

Comment puis-je mettre en forme un nombre sous forme de texte avec un nombre variable de chiffres? Quelque chose comme:

Dim N as Integer
Dim INPUT as Integer: INPUT = 341
Dim OUPUT as String

OUTPUT = Format(INPUT, "00...0")

"00...0" a N chiffres. Par exemple, si N = 7 , je veux OUTPUT = "0000341" . Puis-je faire quelque chose comme ça sur VBA ? Je ne trouve pas de solution pour ça ... Merci.


2 commentaires

OUTPUT = Format(INPUT, Application.Rept("0",N))


@ScottCraner, si simple! Merci!!


3 Réponses :


2
votes

Je créerais une fonction simple pour y parvenir:

Debug.Print FormatToLength(341, 7)
0000341

Production:

Public Function FormatToLength(number As Long, length As Long) As String
    Dim returnValue As String
    
    returnValue = Application.Rept("0", length) & number
    returnValue = Right(returnValue, length)
    
    FormatToLength = returnValue
End Function

Cela crée une longueur de 0 répété et ajoute le nombre à la fin. Il utilise ensuite Right pour réduire la taille du retour à la longueur souhaitée.


1 commentaires

Merci. C'est une solution élégante!



0
votes

Cela ne peut pas être la meilleure façon de le faire, mais voici un moyen simple:

Dim N as Integer 
Dim input_value as Integer
Dim OUPUT as String

Dim formatstring as String

N = 4
input_value = 341

'assumes N is an integer > 0
For i = 1 to N
    formatstring = formatstring + "0"
Next i

OUTPUT = Format(input_value, formatstring)


1 commentaires

& doit être utilisé pour concaténer, pas + .



3
votes

Voici un moyen qui ne dépend pas de l'objet Application:

Option Explicit

Private Sub Command1_Click()
   MsgBox FormatToLength(341, 7)
End Sub

Private Function FormatToLength(ByVal Value As Variant, ByVal Length As Long) As String
   FormatToLength = Format(Value, String(Length, "0"))
End Function


2 commentaires

IMO encore plus élégante :-)


Cela devrait être la réponse évidente.