IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Connaissez-vous d'autres solutions pour faire ce formatage d'une chaine numérique ? [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #41
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bon
    Je ne voudrais pas, patricktoulon, que tu prennes également le présent message comme la volonté de "pourrir" ...
    Mais certaines choses paraissent nécessaires. Je crois te l'avoir déjà dit il y a plus d'un an : il est indispensable, si l'on ne veut pas arriver à un résultat étrange, de définir entre autres :
    - le nom de l'unité au singulier
    - le nom de l'unité au pluriel (ce n'est pas toujours le nom au singulier suivi d'un "s" ...)
    - le genre de l'unité (masculin ou féminin)
    - le nom du centième au singulier
    - le nom du centième au pluriel (ce n'est pas toujours le nom au singulier suivi d'un "s" ...)
    - le genre du centième (masculin ou féminin)
    Regarde maintenant ces deux liens (ils devraient mieux te faire comprendre cette nécessité) :
    https://fr.wikipedia.org/wiki/Roupie_indienne
    https://fr.wiktionary.org/wiki/paisa
    tu as là une monnaie et ses subdivisions (et ce n'est pas la plus complexe).
    Bien -->> soumets maintenant à ton code la transposition en lettres, en devises indiennes, de la somme 1501,01 puis 1001,02
      1  1

  2. #42
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    j'ai un point de repaire
    nombres en lettres
    qui me donne les 3 modes d'ecriture
      0  1

  3. #43
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Je ne vois pas de rapport entre ce "lien de repère" et ce dont je t'ai parlé
      0  0

  4. #44
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    ben a vrai dire moi non plus je vois pas le rapport avec la monnaie indi

    en langue françaises le singulier et pluriel est respecté

    ma fonction n'a pas pour vocation de couvrir toutes les monnaies d'ailleurs la monnaie est une option et qui restera une option
    donc en ce qui concerne celles que je veux intégrer en extra (dans une fonction séparée)sont pour le momment euro dollars dirham
    comme tu peux le voir la fonction servira a d'autre unité de mesure aussi
    mais que les choses soit claires c'est une option!!
    seul l'exercice des nombres en lettre m'interesse en une methode compact et je pense y etre arrivé

    pourquoi crois tu que j'ai séparé ces deux points
    ma fonction renvoie l'entier et ou le decimal en lettre
    j'empeche personne d'essayé l'association a une /des monnaies et de creer sa propre fonction
    c'est d'ailleurs aussi pour ca que la recommandation 1990 est optional car elle ne doit pas etre appliquée pour l'euro par exemple

    voila seule l'orthographe de la fonction m'interesse
    et d'ailleur intégrer toute les monnaies et ses conventions orthographique devriendrait un carcan a deboguer
    je le redis pour le momment c'est le nombres en lettres qui m'interessent et en français
      0  1

  5. #45
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    voila seule l'orthographe de la fonction m'interesse
    Et le problème est bien là, un nombre exprimant toujours celui d'unités s'il veut avoir un sens.
    et d'ailleur intégrer toute les monnaies et ses conventions orthographique devriendrait un carcan a deboguer
    Il ne s'agit nullement des conventions orthographiques des unités, mais de leur nom et de leur genre

    Mais si tu veux simplement exprimer un nombre, tout seul (sans préciser les unités concernées, donc), les choses sont simples, mais alors sans utilité d'application. Je ne connais personnellement aucun cas d'écriture en toutes lettres d'un nombre non suivi des unités concernées.
    Exemple :
    cent un (101) seul ne signifie pas grand chose. Signifient quelque-chose (exemples) :
    cent un pantalons
    cent une chemises
    cent une roupies
    un franc suisse
    dix francs suisses
    un million de dollars
    un million d'euros

    Je t'encourage par ailleurs enfin à t'intéresser aux échelles courtes et aux échelles longues en matière d'expression des nombres. En France, notamment, l'usage est l'emploi de l'échelle longue.
      0  0

  6. #46
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    cent un (101) seul ne signifie pas grand chose. Signifient quelque-chose (exemples) :
    cent un pantalons je n'inclut pas cette devise
    cent une chemises non plus
    cent une roupies encore moins
    un franc suisse ca changera pas avec euros
    dix francs suisses pareil sa s'accorde comme euros
    un million de dollars c'est fait
    un million d'euros c'est fait

    reste sur le euros dirham et dollars
    et pour tes chemise rien ne m'empeche d'ajouter une ligne feminin masculin pour le "un" mais c'est pas a l'ordre du jour
    bref j'ai compris on va partir dans un debat qui pour l'instant n'est pas a l'ordre du jour
    ce qui m'interesse c'est le formatage qui pose probleme toute les versions pose probleme avec une chaine de 20 et plus caracteres
    je prefere rais rester concentré sur ce probleme et le comprendre
    merci pour les retours
      0  1

  7. #47
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re le doigt sur les problemes
    pour etre precis
    probleme1 les longues chaines sont tronquées avant d'etre formatées (ryu) et si on change le pattern en "@@@ "
    se sont les petites chaines qui ne sont pas formatées
    probleme 2 si c'est un entier walouh!! on plante au dec(1)
    probleme 3 le redim preserve (0 to 1) (pour normaliser dec a 2 items tout le temps ) plante


    pour ryu si je change "000" en "@@@" se sont les petite cahines qui ne sont pas formatées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ryu()
        arr = Array("1,5", "123456789,85", "12,45", "993456231985632159856325756399,45", "9") 'les entiers ne passent pas dec ne fait qu'un
        For a = 0 To 4
            dec = Split(CStr(arr(a)), ",")
             'ReDim Preserve dec(0 To 1)'il ne l'accepte pas alors que dans ma fonction il l'accepte
            dec(0) = RTrim(Format(dec(0), Application.Rept("000 ", Application.RoundUp(Len(dec(0)) / 3, 0))))
            dec(1) = RTrim(Format(dec(1), Application.Rept("000 ", Application.RoundUp(Len(dec(1)) / 3, 0))))
            Debug.Print dec(0) & "  ,  " & dec(1)
        Next
    End Sub
    eriic les entiers ne passent pas et le redim preserve plante aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub eriic()
        arr = Array("1,1", "123456789,85", "12,45", "993456231985632159856325756399,45", "9")  'les entiers ne passent pas dec ne fait qu'un
        For a = 0 To 4
            dec = Split(arr(a), ",")
            'ReDim Preserve dec(0 To 1) 'il ne l'accepte pas alors que dans ma fonction il l'accepte
            dec(0) = Format(Mid("00" & dec(0), (Len(dec(0)) - 1) Mod 3 + 1), Application.Rept("@@@ ", Application.RoundUp(Len(dec(0)) / 3, 0)))
            dec(1) = Format(Mid("00" & dec(1), (Len(dec(1)) - 1) Mod 3 + 1), Application.Rept("@@@ ", Application.RoundUp(Len(dec(1)) / 3, 0)))
            Debug.Print dec(0) & "  ,  " & dec(1)
        Next
    End Sub
    voila ce sont ces points que je veux resoudre
      0  1

  8. #48
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bon ben j'ai trouver que cette solution de valable qui prend en charge les entiers len(1/2/3,et plus jusqu'a 30) et pour le decimal creation si il existe pas et formatage a "000"(trois chiffres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub pat()
        Dim dec
        arr = Array("1,1", "123456789,85", "12,45", "993456231985632159856325756399,45", "9")  'les entiers ne passent pas dec ne fait qu'un
        For a = 0 To 4
           dec = Split(Replace(arr(a), ".", ","), ",")
             ReDim Preserve dec(0 To 1)
             dec(1) = Left("000", 3 - Len(dec(1)) Mod 3) & dec(1)
             For i = 0 To UBound(dec)
             dec(i) = Trim(Format(dec(i), IIf(Len(dec(i)) < 3, "#000", Application.Rept("@@@ ", 15))))
           Next
           Debug.Print dec(0) & "-->" & dec(1)
        Next
    End Sub
    si il y a moyen de simplifier ca je prends
    pour etre exact
    le resultat atendu et celui ci:petite rectif sur dec(1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub pat()
        Dim dec
        arr = Array("0,125", "123456789,85", "12,45", "993456231985632159856325756399,45", "9")  'les entiers ne passent pas dec ne fait qu'un
        For a = 0 To 4
           dec = Split(Replace(arr(a), ".", ","), ",")
             ReDim Preserve dec(0 To 1)
             dec(1) = Left("000", 3 - Len(dec(1)) Mod 3) & dec(1):  dec(1) = Right(dec(1), 3)
             For i = 0 To UBound(dec)
             dec(i) = Trim(Format(dec(i), IIf(Len(dec(i)) < 3, "000", Application.Rept("@@@ ", 15))))
           Next
           Debug.Print dec(0) & "-->" & dec(1)
        Next
    End Sub
      0  1

  9. #49
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    ",852" donne "000 852" pour dec(1)
    eric
      1  0

  10. #50
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour eriic
    oui eric j'avais oublier le right 3 dur dec(1)j'ai rectifié
      0  1

  11. #51
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    oh! je crois que que je n'ai plus d'illusion je ferais jamais plus simple que ce que j'avais
    du coup j'ai tranché je n'ajoute plus les zero devant dans la chaine globale au debut
    je les ajoute dans la boucle sur le split dec(0)," ") quand j'analise les segments
    du coup je fait tout sauter je n'applique qu'un format (chaine,app.rept"@@@ ",15)
    le fait de le faire en string ca n'ajoute pas des zero mais des espaces du coup trim coupe
    et finalement c'est plus simple
    mais bon si tu a des idées je suis toutes ouies ne serait ce pour ne pas plier devant la difficulté
      0  1

  12. #52
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Facile à dire vue que je vous regarde vous débattre avec cette problématique depuis un moment, mai j'opterai pour quel que chose comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim nbr as variant, rang as integer
    Nbr=1234567890
    Nbr=space(4) & nbr
    For i = len(nbr) -3 to 0 step -3
    rang=rang+1
    T= convernombr(mid(nbr,i,3),rang,len(trim(nbr))) & T
    Nex
    Dernière modification par Invité ; 06/07/2018 à 20h39.
      0  1

  13. #53
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    oui robert j'avais trouver une boucle moi aussi je vouslais quelque chose de plus plus quoi
    mais visiblement toutes les fonctions vba ont des inconvéniants
    j'ai donc comme je l'ai dit formater "@@@ " 15 fois avec un trim

    je me retrouve avec par exemple
    12 345 678
    ou
    2 345 678
    et comme mon traitement se fait dans le split par les " " je verifie le len(3) a chaque part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Sub test()
    'Debug.Print nombre_toutes_lettre3("1", , "euro")
        Debug.Print nombre_toutes_lettre3("1,1", , "euro")
        Debug.Print nombre_toutes_lettre3("0,27", , "euro")
        Debug.Print nombre_toutes_lettre3("1,27", , "point")
        Debug.Print nombre_toutes_lettre3("580,27", , "dirham")
        Debug.Print nombre_toutes_lettre3("10,275", True, "metre")
        Debug.Print nombre_toutes_lettre3("1000,56", , "euro")
        Debug.Print nombre_toutes_lettre3("1000000", , "euro")
        Debug.Print nombre_toutes_lettre3("1000000", , "dollars")
        Debug.Print nombre_toutes_lettre3("1001000000", , "euro")
        Debug.Print nombre_toutes_lettre3("100,86", , "dollars")
        Debug.Print nombre_toutes_lettre3("45,23", , "point")
        Debug.Print nombre_toutes_lettre3("1012101,56")
        Debug.Print nombre_toutes_lettre3("2221,56", True)
        Debug.Print nombre_toutes_lettre3("2437,56", True)
        Debug.Print nombre_toutes_lettre3("3571291245,562", , "dollars")
        Debug.Print nombre_toutes_lettre3("1000000000", True)
        Debug.Print nombre_toutes_lettre3("1000000001", True)
        Debug.Print " Et juste pour le fun "
        Debug.Print nombre_toutes_lettre3("990073548236458235430002211305,25")
        Debug.Print ":):):):):):):)"
    End Sub
     
    Function nombre_toutes_lettre3(nombre As String, Optional recomm1990 As Boolean = False, Optional monnaie As String = " virgule ")
        Dim dec, unit1, unit10, ms, ds$, i&, cen$, dix$, u$, diz$, Part, msx&, T&, ET$, result$, centi$
        unit1 = Array("", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Onze", "Douze", "treize", "Quatorze", "Quinze", "Seize", "Dix-Sept", "Dix-Huit", "Dix-Neuf", "cent", "zéro")
        unit10 = Array("", " dix", " vingt", " trente", " quarante", " cinquante", " soixante", " soixante-dix", " quatre-vingt", " quatre-vingt-dix", " cent")
        ms = Array("", " mille ", " million ", " milliard ", " Billion ", " Billiard ", " Trillion ", " Quatrillion ", " Quintillion ", " sextillion ", "")
        dec = Split(Replace(nombre, ".", ","), ",")
        ReDim Preserve dec(0 To 1)
        If monnaie <> " virgule " And monnaie <> "metre" Then dec(1) = Mid(dec(1), 1, 2)
        devise dec, monnaie, centi
        For i = 0 To UBound(dec)
            dec(i) = Trim(Format(dec(i), IIf(Len(dec(i)) < 3, "000", Application.Rept("@@@ ", 15))))
            Part = Split(dec(i), " "): msx = UBound(Part): dec(i) = ""
            For T = 0 To UBound(Part)
                Part(T) = Right("00" & Part(T), 3)
                If ms(msx - T) <> " mille " And ms(msx - T) <> "" Then ms(msx - T) = IIf(Val(Part(T)) > 1, RTrim(ms(msx - T)) & "s ", ms(msx - T))
                cen = Val(Left(Part(T), 1)): dix = Val(Right(Part(T), 2)): diz = Val(Mid(Part(T), 2, 1)): u = Val(Right(Part(T), 1))
                If Val(cen) = 1 Then cen = " cent" Else If Val(cen) > 1 Then cen = unit1(cen) & " cent" Else cen = unit1(Val(cen))
                If dix > 10 And dix < 20 Then diz = 0: u = u + 10
                If dix > 70 And dix < 80 Or dix > 90 And dix < 100 Then diz = diz - 1: u = u + 10
                If dix > 20 And dix < 80 And Right(u, 1) Like "*1*" Then ET = " et " Else If u > 1 And diz > 0 Then ET = "-" Else ET = " "
                If dix = 80 Then ds = "s" Else ds = ""
                dix = unit10(diz) & ds & ET & unit1(u)
                If ms(msx - T) = " mille " And Val(Part(T)) = 1 Then dix = " mille ": Part(T) = 0
                dec(i) = dec(i) & cen & dix & IIf(Val(Part(T)) > 0 And i = 0, ms(msx - T), " ")
            Next
            If recomm1990 Then dec(i) = Replace(Application.Trim(dec(i)), " ", "-")
        Next
        nombre_toutes_lettre3 = Application.Trim(dec(0) & " " & monnaie & " " & dec(1) & " " & centi)
    End Function
    Function devise(dec, mon, centi)
        Dim DE
        If Left(mon, 1) Like "[a-e-i-o-u-y]" Then DE = " d'" Else DE = " de "
        Select Case mon
        Case "euro", "dirham"
            If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 And Right(dec(0), 1) = 0 Then mon = DE & mon
            mon = " " & mon & IIf(Val(dec(0)) > 1, "s", "") & IIf(Val(dec(1)) > 0, " et ", "")
            If Val(dec(1)) > 0 Then centi = " centime" & IIf(Val(dec(1)) > 1, "s", "")
            If Val(dec(0)) = 0 Then mon = ""
        Case "dollars"
            If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 And Right(dec(0), 1) = 0 Then mon = " de " & mon
            mon = " " & mon & " ": If Val(dec(1)) > 0 Then centi = " cent" & IIf(Val(dec(1)) > 1, "s", "")
        Case "point"
            If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 Then mon = " " & DE & " " & mon
            If Val(dec(0)) > 1 Then mon = "  " & mon & "s ": centi = ""
        Case "metre"
            If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 Then mon = " " & DE & " " & mon
            If Val(dec(0)) > 1 Then mon = "  " & mon & "s " & IIf(Val(dec(1)) > 0, " et ", ""): centi = "milimetre" & IIf(Val(dec(1)) > 1, "s", "")
        Case "litre"
     
        Case " virgule ": If Val(dec(1)) = 0 Then mon = ""
        Case "coup dans ta gueule"
        End Select
     
    End Function
    Un euro et Un centime
    vingt-Sept centimes
    Un point vingt-Sept
    Cinq cent quatre-vingts dirhams et vingt-Sept centimes
    dix metres et Deux-cent-soixante-Quinze milimetres
    mille euros et cinquante-Six centimes
    Un million d'euros
    Un million de dollars
    Un milliard Un million d'euros
    cent dollars quatre-vingt-Six cents
    quarante-Cinq points vingt-Trois
    Un million Douze mille cent Un virgule cinquante-Six
    Deux-mille-Deux-cent-vingt-et-Un virgule cinquante-Six
    Deux-mille-Quatre-cent-trente-Sept virgule cinquante-Six
    Trois milliards Cinq cent soixante et Onze millions Deux cent quatre-vingt-Onze mille Deux cent quarante-Cinq dollars cinquante-Six cents
    Un-milliard
    Un-milliard-Un
    Et juste pour le fun
    Neuf cent quatre-vingt-dix sextillions soixante-treize Quintillions Cinq cent quarante-Huit Quatrillions Deux cent trente-Six Trillions Quatre cent cinquante-Huit Billiards Deux cent trente-Cinq Billions Quatre cent trente milliards Deux millions Deux cent Onze mille Trois cent Cinq virgule vingt-Cinq

      0  1

  14. #54
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 176
    Points
    4 176
    Par défaut
    Re à tous,

    Patrick :

    à voir - une version simple à adapter dans un code en espérant avoir compris (car pas eu beaucoup de temps) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub testx()
        Dim N$
        N = "5143000252642": Lg = Len(N): Gpe = 3: Lt = "0": Reste = Lg Mod Gpe
        N = Trim(Format(String((Gpe - Reste) Mod Gpe, Lt) & N, Application.Rept("@@@ ", Application.RoundUp(Lg / Gpe, 0))))
        Debug.Print N
    End Sub
    la version passe partout via une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub FT()
        Debug.Print FormatTxt("1254564", 2)
        Debug.Print FormatTxt("5143000252642", 3)
        Debug.Print FormatTxt("5143000252642", 3, "0")
        Debug.Print FormatTxt("25143000252642", 3, "0")
        Debug.Print FormatTxt("5143000252642", 3, "X")
        Debug.Print FormatTxt("UEADKLSDJIOSDD", 5, "X")
        Debug.Print FormatTxt("UEAdDKLS456DJIOSDD", 4, "Y")
        Debug.Print FormatTxt("5143000252642", 3, "-")
        Debug.Print FormatTxt("UEAdDKLS456DJIOSDD", 4)
        Debug.Print String(20, "-")
        Debug.Print FormatTxt("5143000252642", 3, "0")
        Debug.Print FormatTxt("514300025264245671059710648951130", 3, "0")
        Debug.Print FormatTxt("142642456", 3, "0")
        Debug.Print FormatTxt("42642456", 3, "0")
        Debug.Print FormatTxt("4264245", 3, "0")
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function FormatTxt(T$, Gpe As Byte, Optional Lt As String = "") As String
    Dim Forme$, Lg As Byte, Avant$
        Forme = String(Gpe, "@") & " ":     Lg = Len(T):
        If Lt > "" Then Avant = String((Gpe - Lg Mod Gpe) Mod Gpe, Lt) Else Avant = Lt
        FormatTxt = Trim(Format(Avant & T, Application.Rept(Forme, Application.RoundUp(Lg / Gpe, 0))))
    End Function
      0  1

  15. #55
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    juste un point de détail mais qui compte quand même car régulièrement il y a un tunisien (pas toujours le même, je vous rassure ) qui demande une adaptation :
    le dirham tunisien est divisé en 1000 millimes et non en 100 centimes.
    eric
      0  0

  16. #56
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    merci eriic pour l'info
    au maroc non
    pour cette adapte c'est rien du tout a faire

    il faut simplement changer dirham pou dirham maroc et ajouter dirham tunis par exemple
    et ajouter dirham tunis au exeptions avec metre et virgule comme ca on reste a 3 chiifre donc 999 millimes +1 = un dirham tunisien
      0  1

  17. #57
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oulah!! eriic t'a failli m'induire en erreur c'est pas dirham mais dinars en tunisie
      0  1

  18. #58
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 176
    Points
    4 176
    Par défaut
    dis donc tu fais mal quand tu donne la fessée
    je te préviens moi j'en veux pas
      0  1

  19. #59
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonsoir ryu
    oui mais on est pas dans l'optimisation
    cela dit ca match
    tiens regarde celle la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub pat5()
        dec = Split("645823543000221130,5", ",")
        dec(0) = Trim(Replace(Replace(Replace(Format(dec(0), Application.Rept("@@@|", 15)), "   |", ""), " ", "0"), "|", " "))
         dec(1) = Trim(Replace(Replace(Replace(Format(dec(1), Application.Rept("@@@|", 15)), "   |", ""), " ", "0"), "|", " "))
       Debug.Print dec(0) & "-->" & dec(1)
    End Sub
    la meme formule pour les deux parties
      0  1

  20. #60
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 176
    Points
    4 176
    Par défaut
    Re

    j'ai juste modifié le 1er code que j'avais fait, cela tiens toujours sur une ligne et là on a pas de limite à part celle que Excel impose …

    en effet le tiens marche avec beaucoup de Replace

    PS: j'ai fait mon code comme cela car c'est paramétrable à souhait et facilement - sur le 1er code ,avant la fonction, je l'ai juste décomposé pour que tu puisses voir
    Après j'ai pas testé les vitesses d'exécution …

    Et moi aussi ça fait les 2 parties
      0  1

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/03/2016, 20h38
  2. solution pour faire du e-learning
    Par aldo-tlse dans le forum Flash
    Réponses: 2
    Dernier message: 25/10/2006, 19h35
  3. Réponses: 9
    Dernier message: 01/06/2006, 23h34
  4. D'autres idées pour faire la même chose ?
    Par Gromitou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2006, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo