Autres créer une chaîne numérique formaté en fonction du nombre de caractères

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricktoulon

XLDnaute Barbatruc
bonjour a tous
je simplifie mes macros
aujourd'hui je cherche a formater une chaîne numérique par groupe de 3 quelque soit le nombre de caractères

12345: doit donner 012 345

1234567: doit donner 001 234 567


j'ai tenté mod mais ca match pas a tout les coups
VB:
Sub test()
   Dim chaine$, adding$
    chaine = "12345678910111213182"
    adding = String(Len(chaine) Mod 3 + IIf(Len(chaine) Mod 3 > 0, 1, 0), "0")
    chaine = Format(adding & chaine, Application.Rept(" @@@ ", Len(chaine)))
    MsgBox chaine
End Sub
quelqu'un a une idée sans boucle
 
Dernière édition:
bonsoir a tous
ou lala!! Job75
c'est pas résolu du tout
VB:
Sub test1()
Dim chaine
chaine = ("551561571581591501570268354298")
Debug.Print RTrim(Format(chaine, Application.Rept("000 ", Application.RoundUp(Len(CStr(chaine)) / 3, 0))))
End Sub

resultat
551 561 571 581 592 000 000 000 000 000

ça va plus du tout 😵
 
Bonsoir patricktoulon,

Oui la fonction Format convertit n en nombre et il y a une limite.

Avec ce code il n'y a bien sûr plus de limite :
VB:
Function F(n As String) As String
Dim ub%, a$(), i%
ub = Application.RoundUp(Len(n) / 3, 0)
ReDim a(1 To ub)
For i = Len(n) - 2 To 1 Step -3
    a(ub) = Mid(n, i, 3)
    ub = ub - 1
Next
If a(1) = "" Then a(1) = Left(String(Abs(i) + 1, "0") & n, 3)
F = Join(a)
End Function
Les caractères peuvent d'ailleurs être quelconques...

Fichier (2).

Bonne nuit.
 

Pièces jointes

re
voila ce dont je me sert depuis dix ans
je voulais juste savoir si on pouvait encore simplifier
VB:
Sub test()
chaine = "1234567831"
If Len(chaine) Mod 3 <> 0 Then chaine = Application.Rept("0", 3 - Len(chaine) Mod 3) & chaine    'on formate l'entier a 3 chiffre par tranche
MsgBox Format(chaine, Application.Rept(" 000", Len(chaine) / 3))
End Sub

bonjour @Dranreb je vais tester
 
re
je pensait que l'on allait trouver mieux dix ans apres mais non
comme ça je suis illimité
VB:
Sub test()
chaine = "1234567831123654785654784521425654122145232564"
If Len(chaine) Mod 3 <> 0 Then chaine = Application.Rept("0", 3 - Len(chaine) Mod 3) & chaine    'on formate l'entier a 3 chiffre par tranche
MsgBox Format(chaine, Application.Rept(" @@@", Len(chaine) / 3))
End Sub
 
Pour que ça convienne à des textes jusqu'à 300 de long (augmentable) :
VB:
Function Groupe3(ByVal Txt As String) As String
   Txt = String((300 - Len(Txt)) Mod 3, "0") & Txt
   Groupe3 = Format(Txt, WorksheetFunction.Rept(" @@@", Len(Txt) / 3))
   End Function
Mais on en vient tout doucement à ce que tu avais fait.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour