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

Access Discussion :

etat de sortie d'une facture client


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    en formation
    Inscrit en
    Octobre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Niger

    Informations professionnelles :
    Activité : en formation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 44
    Points : 33
    Points
    33
    Par défaut etat de sortie d'une facture client
    Bonsoir monsieur*
    je vous remercie infiniment pour l'aide que vous nous apportez,

    j'aimerai tout simple vous signaler le probleme de convertion des chiffres en lettres demeure encore malgres le code que vous m'avez dit de copier,

    le code m'envoi le message suivant: erreur de compilation

    voici le code:

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
     
    Option Compare Database
    Option Explicit
     
    ' Constantes diverses
    ' (voir tableau astrSpecial et fonction InitialisationMots)
    Public Const CONV_ZERO As Integer = 1
    Public Const CONV_MOINS As Integer = 2
    Public Const CONV_ET As Integer = 3
    Public Const CONV_VIRGULE As Integer = 4
     
    ' Constantes liées aux nombres
    ' (voir tableau astrSpecial et fonction InitialisationMots)
    Public Const CONV_60 As Integer = 5
    Public Const CONV_80 As Integer = 6
    Public Const CONV_1E2 As Integer = 7
    Public Const CONV_1E3 As Integer = 8
    Public Const CONV_1E6 As Integer = 9
    Public Const CONV_1E9 As Integer = 10
     
    ' Tableau des mots
    Dim astrMot(1 To 24) As String
    Dim astrSpecial(1 To 10) As String
    ' ---
    ' Conversion d'un nombre en lettres
    ' ---
    ' Entrée : strValeur  <= Nombre à convertir
    '          strDevise  <= Nom au singulier de la devise (facultatif).
    '                        Ex. : "euro"
    '          strCentime <= Nom au singulier des centimes (facultatif).
    '                        Ex. : "centime" ou "cent"
    '          intDigits  <= Nombre de décimales.
    ' Sortie : Nombre en toutes lettres
    '
    Function NbEnLettres( _
      ByVal strValeur As String, _
      Optional ByVal strDevise As String = "", _
      Optional ByVal strCentime As String = "", _
      Optional ByVal intDigits As Integer = 2) _
      As String
     
      Dim strA As String
      Dim strK As String
      Dim strN As String
      Dim intI As Integer
      Dim strResultat As String
      Dim blnVirgule As Boolean
     
      ' Initialisation du tableau contenant les mots interprétés
      InitialisationMots
      If strDevise = "" Or strCentime = "" Then
        astrSpecial(CONV_ET) = astrSpecial(CONV_VIRGULE)
      End If
     
      ' Récupération de paramètre passé
      strA = strValeur + " "
     
      ' Initialisation des variables de travail
      strN = ""
      blnVirgule = False
      strResultat = ""
     
      ' Traiter toute la chaîne de valeur
      For intI = 1 To Len(strA)
        ' On extrait chacun des caractères
        strK = Mid(strA, intI, 1)
     
        Select Case strK
          ' Gèrer les montants négatifs
          Case "-"
            AjouterMot strResultat, astrSpecial(CONV_MOINS)
     
          ' Pour les caractères numériques, bâtir la chaine strN
          Case "0" To "9"
            strN = strN + strK
     
          ' Sinon, on teste si on est arrivé à une virgule
          Case Else
            If blnVirgule Then
              ' Les centimes sont comptés sur 2 digits, réajustés de
              ' manière inverse aux devises, puisqu'on lit les unités
              ' et dizaines de manière inversée (0,2€ = 20c et 0,02€ = 2c)
              strN = Right("000" + Left(strN + "000", intDigits), intDigits)
              If Val(strN) = 0 Then strN = ""
            End If
     
            ' On traduit le nombre stocké dans strN
            strResultat = TraduireEntier(strResultat, strN)
     
            ' Puis on détermine son unité en fonction de la présence
            ' ou non d'une virgule
            If (Not blnVirgule) And Val(strN) > 0 Then
              AjouterMot strResultat, strDevise
     
              ' Et on accorde l'unité avec le nombre
              ' (sauf s'il n'y a pas de devise)
              If strDevise <> "" Then
    'If Val(strN) > 1 Then AjouterMot strResultat, "s"
              End If
     
            ElseIf blnVirgule And Val(strN) > 0 Then
              AjouterMot strResultat, strCentime
     
              ' On ajoute un "s" si nécessaire
              If strCentime <> "" Then
                If Val(strN) > 1 Then AjouterMot strResultat, "s"
              End If
            End If
     
            strN = ""
            Select Case strK
              Case Chr(13)
                intI = intI + 1
     
              Case Is < " "
     
              Case ",", "."
                blnVirgule = True
                ' Si une valeur en devises est exprimée, et que le
                ' nombre de centimes est suffisant pour être traité,
                ' on lie les 2 par le mot "et"
                If Val(strA) <> 0 And Val("0." + Mid(strA, intI + 1)) >= 0.01 Then
                  AjouterMot strResultat, astrSpecial(CONV_ET)
                End If
     
              Case Else
            End Select
        End Select
      Next
     
      ' Valeur finale
      NbEnLettres = strResultat
    End Function
     
    ' ---
    ' Traduction d'un nombre entier contenu dans une chaîne de caractères
    ' en son équivalent ordinal.
    ' ---
    ' Entrée : strChaine          <= Chaîne de départ (à compléter)
    '          strNombreATraduire <= Nombre à traduire (!)
    ' Sortie : Nombre traduit en toutes lettres
    '
    Function TraduireEntier( _
      ByVal strChaine As String, _
      ByVal strNombreATraduire As String) _
      As String
     
      Dim strNombre As String
      Dim intLongueur As Integer
      Dim strCDU As String
      Dim strCentaines As String
      Dim strDizaines As String
      Dim strUnites As String
      Dim blnEt As Boolean
      Dim blnTiret As Boolean
     
      strNombre = strNombreATraduire
      If strNombre <> "" Then
      ' Si le nombre est 0, on ne perd pas de temps
      If Val(strNombre) = 0 Then
        AjouterMot strChaine, astrSpecial(CONV_ZERO)
      Else
        ' Sinon, on convertit celui-ci en une chaine de caractères
        ' de intLongueur multiple de 3, afin de pouvoir la lire par blocs
        ' de 3 caractères
        strNombre = Right("000", -((Len(strNombre) Mod 3) <> 0) _
          * (3 - (Len(strNombre) Mod 3))) + strNombre
     
        For intLongueur = Len(strNombre) To 3 Step -3
          strCDU = Left(strNombre, 3)
          strNombre = Right(strNombre, intLongueur - 3)
     
          ' On extrait ainsi des ensembles de 3 chiffres,
          ' de la gauche vers la droite
          If strCDU <> "000" Then
            ' ... dont on tire une valeur de
            ' centaines, dizaines et unités
            strCentaines = Left(strCDU, 1)
            strDizaines = Mid(strCDU, 2, 1)
            strUnites = Right(strCDU, 1)
     
            ' On convertit les unités non muettes pour les centaines
            If strCentaines >= "2" Then
              AjouterMot strChaine, Equivalent(Val(strCentaines))
            End If
     
            ' Et on traite les 1 muets
            If strCentaines >= "1" Then
              AjouterMot strChaine, astrSpecial(CONV_1E2)
     
              ' On applique les règles d'accords pour les centaines
              If Val(strNombre) = 0 And strDizaines + strUnites = "00" _
                And Len(strChaine) > 4 Then AjouterMot strChaine, "s"
            End If
     
            ' On analyse si le mot ET est nécessaire (21, 31, 41...)
            blnEt = (strDizaines >= "2") And (strUnites = "1")
     
            ' Ainsi que les tirets pour certains couples
            ' dizaines-unités
            blnTiret = ((strDizaines >= "2") And (strUnites > "1") _
              Or (strDizaines >= "1" And strUnites >= "7")) And (Not blnEt)
     
            ' Traitement des valeurs 80-99
            If strDizaines >= "8" Then
              AjouterMot strChaine, astrSpecial(CONV_80)
              blnEt = False
     
              ' Retenue nécessaire pour 90 à 99
              If strDizaines = "8" Then
                strDizaines = "0"
              Else
                strDizaines = "1"
                blnTiret = True
              End If
     
              ' Traitement des unités
              If strUnites > "0" Then
                blnTiret = True
              Else
                AjouterMot strChaine, "s"
              End If
     
            ' Sinon on traite les valeurs 70 à 79
            ElseIf strDizaines = "7" Then
              AjouterMot strChaine, astrSpecial(CONV_60)
     
              ' Retenue pour les dizaines
              strDizaines = "1"
              If strUnites <> "1" Then blnTiret = True
            End If
     
            ' Valeurs entre 10 et 16
            If (strDizaines = "1") And (strUnites <= "6") Then
              strDizaines = "0"
              strUnites = "1" + strUnites
            End If
     
            ' Sinon, on gère toutes les autres dizaines
            If strDizaines >= "1" Then
              ' Gérer les tirets pour les dizaines composées
              If blnTiret And strDizaines = "1" _
                And Val(Right(strCDU, 2)) > 19 Then
                  AjouterMot strChaine, "-"
              End If
     
              ' Traduction de la dizaine...
              AjouterMot strChaine, Equivalent(Val(strDizaines + "0"))
     
              ' Accorder l'exception des vingtaines
              If strDizaines + strUnites = "20" And strCentaines <> "0" Then
                AjouterMot strChaine, "s"
              End If
            End If
     
            ' Si le mot Et est nécessaire, on l'ajoute
            If blnEt Then AjouterMot strChaine, astrSpecial(CONV_ET)
              ' ... ainsi que le tiret, liant
              ' une dizaine et une unité
              If blnTiret Then AjouterMot strChaine, "-"
     
              ' puis on traduit l'unité du nombre
              If Val(strUnites) >= 22 Or ((Val(strUnites) >= 1 _
                And (Val(strCDU) > 1 _
                Or intLongueur <> 6))) Then
                AjouterMot strChaine, Equivalent(Val(strUnites))
              End If
     
              ' Enfin, la pondération du nombre est respectée,
              ' en ajoutant le multiple nécessaire, et en
              ' l'accordant s'il le faut
              Select Case intLongueur
                Case 6
                  AjouterMot strChaine, astrSpecial(CONV_1E3)
     
                Case 9
                  AjouterMot strChaine, astrSpecial(CONV_1E6)
                  If Val(strCDU) > 1 Then AjouterMot strChaine, "s"
     
                Case 12
                  AjouterMot strChaine, astrSpecial(CONV_1E9)
                  If Val(strCDU) > 1 Then AjouterMot strChaine, "s"
     
                Case Else
              End Select
            End If
          Next
        End If
      End If
     
      TraduireEntier = strChaine
    End Function
     
    ' ---
    ' Ajout d'un terme traduit à une chaine
    ' ---
    ' Entrée : strChaine <= Chaîne à laquelle ajouter un terme.
    '          strMot    <= Terme à ajouter.
    ' Sortie : strChaine est directement modifiée.
    '
    Sub AjouterMot( _
      ByRef strChaine As String, _
      ByVal strMot As String)
     
      If strChaine <> "" Then
        ' Le nouveau terme est directement collé aux précédents
        ' dans le cas des "S" à rajouter, ou des tirets
        If Right(strChaine, 1) = "-" Or strMot = "s" Or strMot = "-" Or strMot = "" Then
          strChaine = strChaine + strMot
        Else
          ' Sinon, ajouter le terme après un espace
          strChaine = strChaine + " " + strMot
        End If
      Else
        strChaine = strMot
      End If
    End Sub
     
    ' ---
    ' Recherche d'un mot équivalent à une valeur numérique
    ' ---
    '
    Function Equivalent(ByVal intValeur As Integer) As String
      Select Case intValeur
        Case Is < 21
          Equivalent = astrMot(intValeur)
        Case Else
          Equivalent = astrMot(18 + (intValeur / 10))
      End Select
    End Function
     
    ' ---
    ' Initialisation du tableau de mots
    ' ---
    '
    Sub InitialisationMots()
      ' Termes principaux
      astrMot(1) = "un"
      astrMot(2) = "deux"
      astrMot(3) = "trois"
      astrMot(4) = "quatre"
      astrMot(5) = "cinq"
      astrMot(6) = "six"
      astrMot(7) = "sept"
      astrMot(8) = "huit"
      astrMot(9) = "neuf"
      astrMot(10) = "dix"
      astrMot(11) = "onze"
      astrMot(12) = "douze"
      astrMot(13) = "treize"
      astrMot(14) = "quatorze"
      astrMot(15) = "quinze"
      astrMot(16) = "seize"
      astrMot(20) = "vingt"
      astrMot(21) = "trente"
      astrMot(22) = "quarante"
      astrMot(23) = "cinquante"
      astrMot(24) = "soixante"
     
      ' Termes spéciaux
      astrSpecial(CONV_ZERO) = "zéro"
      astrSpecial(CONV_MOINS) = "moins"
      astrSpecial(CONV_ET) = "et"
      astrSpecial(CONV_VIRGULE) = "virgule"
     
      ' Constantes liées aux nombres
      astrSpecial(CONV_60) = "soixante"
      astrSpecial(CONV_80) = "quatre-vingt"
      astrSpecial(CONV_1E2) = "cent"
      astrSpecial(CONV_1E3) = "mille"
      astrSpecial(CONV_1E6) = "million"
      astrSpecial(CONV_1E9) = "milliard"
    End Sub
    Merci de votre bonne compréhension

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    Bonsoir,
    quelle est la ligne d'instruction qui est en erreur (elle devrait être surlignée dans la fenêtre VBA) ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    Donne nous également la ligne de code avec laquelle tu appelles la fonction.

    Tu peux essayer, par exemple, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox NbEnLettres("12345.56", "franc CFA", "centime", 2)
    Un problème bien posé est à moitié résolu

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    en formation
    Inscrit en
    Octobre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Niger

    Informations professionnelles :
    Activité : en formation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 44
    Points : 33
    Points
    33
    Par défaut eatat de sorie d'une facture client
    bjr monsieur titi95, merci de m'avoir repondu
    la ligne de code qui m'envoi le message d'erreur est la ligne n07

    le nom de zone de texte de l'etat de la facture est montant_com,
    la fonction utilisee pour la convertion est : =NbEnLettres([NomZoneTotalEnChiffres], "franc CFA", "centime", 2)



    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    Option Compare Database
    Option Explicit
     
    ' Constantes diverses
    ' (voir tableau astrSpecial et fonction InitialisationMots)
    Public Const CONV_ZERO As Integer = 1
    Public Const CONV_MOINS As Integer = 2
    Public Const CONV_ET As Integer = 3
    Public Const CONV_VIRGULE As Integer = 4
     
    ' Constantes liées aux nombres
    ' (voir tableau astrSpecial et fonction InitialisationMots)
    Public Const CONV_60 As Integer = 5
    Public Const CONV_80 As Integer = 6
    Public Const CONV_1E2 As Integer = 7
    Public Const CONV_1E3 As Integer = 8
    Public Const CONV_1E6 As Integer = 9
    Public Const CONV_1E9 As Integer = 10
     
    ' Tableau des mots
    Dim astrMot(1 To 24) As String
    Dim astrSpecial(1 To 10) As String
    ' ---
    ' Conversion d'un nombre en lettres
    ' ---
    ' Entrée : strValeur  <= Nombre à convertir
    '          strDevise  <= Nom au singulier de la devise (facultatif).
    '                        Ex. : "euro"
    '          strCentime <= Nom au singulier des centimes (facultatif).
    '                        Ex. : "centime" ou "cent"
    '          intDigits  <= Nombre de décimales.
    ' Sortie : Nombre en toutes lettres
    '
    Function NbEnLettres( _
      ByVal strValeur As String, _
      Optional ByVal strDevise As String = "", _
      Optional ByVal strCentime As String = "", _
      Optional ByVal intDigits As Integer = 2) _
      As String
     
      Dim strA As String
      Dim strK As String
      Dim strN As String
      Dim intI As Integer
      Dim strResultat As String
      Dim blnVirgule As Boolean
     
      ' Initialisation du tableau contenant les mots interprétés
      InitialisationMots
      If strDevise = "" Or strCentime = "" Then
        astrSpecial(CONV_ET) = astrSpecial(CONV_VIRGULE)
      End If
     
      ' Récupération de paramètre passé
      strA = strValeur + " "
     
      ' Initialisation des variables de travail
      strN = ""
      blnVirgule = False
      strResultat = ""
     
      ' Traiter toute la chaîne de valeur
      For intI = 1 To Len(strA)
        ' On extrait chacun des caractères
        strK = Mid(strA, intI, 1)
     
        Select Case strK
          ' Gèrer les montants négatifs
          Case "-"
            AjouterMot strResultat, astrSpecial(CONV_MOINS)
     
          ' Pour les caractères numériques, bâtir la chaine strN
          Case "0" To "9"
            strN = strN + strK
     
          ' Sinon, on teste si on est arrivé à une virgule
          Case Else
            If blnVirgule Then
              ' Les centimes sont comptés sur 2 digits, réajustés de
              ' manière inverse aux devises, puisqu'on lit les unités
              ' et dizaines de manière inversée (0,2€ = 20c et 0,02€ = 2c)
              strN = Right("000" + Left(strN + "000", intDigits), intDigits)
              If Val(strN) = 0 Then strN = ""
            End If
     
            ' On traduit le nombre stocké dans strN
            strResultat = TraduireEntier(strResultat, strN)
     
            ' Puis on détermine son unité en fonction de la présence
            ' ou non d'une virgule
            If (Not blnVirgule) And Val(strN) > 0 Then
              AjouterMot strResultat, strDevise
     
              ' Et on accorde l'unité avec le nombre
              ' (sauf s'il n'y a pas de devise)
              If strDevise <> "" Then
    'If Val(strN) > 1 Then AjouterMot strResultat, "s"
              End If
     
            ElseIf blnVirgule And Val(strN) > 0 Then
              AjouterMot strResultat, strCentime
     
              ' On ajoute un "s" si nécessaire
              If strCentime <> "" Then
                If Val(strN) > 1 Then AjouterMot strResultat, "s"
              End If
            End If
     
            strN = ""
            Select Case strK
              Case Chr(13)
                intI = intI + 1
     
              Case Is < " "
     
              Case ",", "."
                blnVirgule = True
                ' Si une valeur en devises est exprimée, et que le
                ' nombre de centimes est suffisant pour être traité,
                ' on lie les 2 par le mot "et"
                If Val(strA) <> 0 And Val("0." + Mid(strA, intI + 1)) >= 0.01 Then
                  AjouterMot strResultat, astrSpecial(CONV_ET)
                End If
     
              Case Else
            End Select
        End Select
      Next
     
      ' Valeur finale
      NbEnLettres = strResultat
    End Function
     
    ' ---
    ' Traduction d'un nombre entier contenu dans une chaîne de caractères
    ' en son équivalent ordinal.
    ' ---
    ' Entrée : strChaine          <= Chaîne de départ (à compléter)
    '          strNombreATraduire <= Nombre à traduire (!)
    ' Sortie : Nombre traduit en toutes lettres
    '
    Function TraduireEntier( _
      ByVal strChaine As String, _
      ByVal strNombreATraduire As String) _
      As String
     
      Dim strNombre As String
      Dim intLongueur As Integer
      Dim strCDU As String
      Dim strCentaines As String
      Dim strDizaines As String
      Dim strUnites As String
      Dim blnEt As Boolean
      Dim blnTiret As Boolean
     
      strNombre = strNombreATraduire
      If strNombre <> "" Then
      ' Si le nombre est 0, on ne perd pas de temps
      If Val(strNombre) = 0 Then
        AjouterMot strChaine, astrSpecial(CONV_ZERO)
      Else
        ' Sinon, on convertit celui-ci en une chaine de caractères
        ' de intLongueur multiple de 3, afin de pouvoir la lire par blocs
        ' de 3 caractères
        strNombre = Right("000", -((Len(strNombre) Mod 3) <> 0) _
          * (3 - (Len(strNombre) Mod 3))) + strNombre
     
        For intLongueur = Len(strNombre) To 3 Step -3
          strCDU = Left(strNombre, 3)
          strNombre = Right(strNombre, intLongueur - 3)
     
          ' On extrait ainsi des ensembles de 3 chiffres,
          ' de la gauche vers la droite
          If strCDU <> "000" Then
            ' ... dont on tire une valeur de
            ' centaines, dizaines et unités
            strCentaines = Left(strCDU, 1)
            strDizaines = Mid(strCDU, 2, 1)
            strUnites = Right(strCDU, 1)
     
            ' On convertit les unités non muettes pour les centaines
            If strCentaines >= "2" Then
              AjouterMot strChaine, Equivalent(Val(strCentaines))
            End If
     
            ' Et on traite les 1 muets
            If strCentaines >= "1" Then
              AjouterMot strChaine, astrSpecial(CONV_1E2)
     
              ' On applique les règles d'accords pour les centaines
              If Val(strNombre) = 0 And strDizaines + strUnites = "00" _
                And Len(strChaine) > 4 Then AjouterMot strChaine, "s"
            End If
     
            ' On analyse si le mot ET est nécessaire (21, 31, 41...)
            blnEt = (strDizaines >= "2") And (strUnites = "1")
     
            ' Ainsi que les tirets pour certains couples
            ' dizaines-unités
            blnTiret = ((strDizaines >= "2") And (strUnites > "1") _
              Or (strDizaines >= "1" And strUnites >= "7")) And (Not blnEt)
     
            ' Traitement des valeurs 80-99
            If strDizaines >= "8" Then
              AjouterMot strChaine, astrSpecial(CONV_80)
              blnEt = False
     
              ' Retenue nécessaire pour 90 à 99
              If strDizaines = "8" Then
                strDizaines = "0"
              Else
                strDizaines = "1"
                blnTiret = True
              End If
     
              ' Traitement des unités
              If strUnites > "0" Then
                blnTiret = True
              Else
                AjouterMot strChaine, "s"
              End If
     
            ' Sinon on traite les valeurs 70 à 79
            ElseIf strDizaines = "7" Then
              AjouterMot strChaine, astrSpecial(CONV_60)
     
              ' Retenue pour les dizaines
              strDizaines = "1"
              If strUnites <> "1" Then blnTiret = True
            End If
     
            ' Valeurs entre 10 et 16
            If (strDizaines = "1") And (strUnites <= "6") Then
              strDizaines = "0"
              strUnites = "1" + strUnites
            End If
     
            ' Sinon, on gère toutes les autres dizaines
            If strDizaines >= "1" Then
              ' Gérer les tirets pour les dizaines composées
              If blnTiret And strDizaines = "1" _
                And Val(Right(strCDU, 2)) > 19 Then
                  AjouterMot strChaine, "-"
              End If
     
              ' Traduction de la dizaine...
              AjouterMot strChaine, Equivalent(Val(strDizaines + "0"))
     
              ' Accorder l'exception des vingtaines
              If strDizaines + strUnites = "20" And strCentaines <> "0" Then
                AjouterMot strChaine, "s"
              End If
            End If
     
            ' Si le mot Et est nécessaire, on l'ajoute
            If blnEt Then AjouterMot strChaine, astrSpecial(CONV_ET)
              ' ... ainsi que le tiret, liant
              ' une dizaine et une unité
              If blnTiret Then AjouterMot strChaine, "-"
     
              ' puis on traduit l'unité du nombre
              If Val(strUnites) >= 22 Or ((Val(strUnites) >= 1 _
                And (Val(strCDU) > 1 _
                Or intLongueur <> 6))) Then
                AjouterMot strChaine, Equivalent(Val(strUnites))
              End If
     
              ' Enfin, la pondération du nombre est respectée,
              ' en ajoutant le multiple nécessaire, et en
              ' l'accordant s'il le faut
              Select Case intLongueur
                Case 6
                  AjouterMot strChaine, astrSpecial(CONV_1E3)
     
                Case 9
                  AjouterMot strChaine, astrSpecial(CONV_1E6)
                  If Val(strCDU) > 1 Then AjouterMot strChaine, "s"
     
                Case 12
                  AjouterMot strChaine, astrSpecial(CONV_1E9)
                  If Val(strCDU) > 1 Then AjouterMot strChaine, "s"
     
                Case Else
              End Select
            End If
          Next
        End If
      End If
     
      TraduireEntier = strChaine
    End Function
     
    ' ---
    ' Ajout d'un terme traduit à une chaine
    ' ---
    ' Entrée : strChaine <= Chaîne à laquelle ajouter un terme.
    '          strMot    <= Terme à ajouter.
    ' Sortie : strChaine est directement modifiée.
    '
    Sub AjouterMot( _
      ByRef strChaine As String, _
      ByVal strMot As String)
     
      If strChaine <> "" Then
        ' Le nouveau terme est directement collé aux précédents
        ' dans le cas des "S" à rajouter, ou des tirets
        If Right(strChaine, 1) = "-" Or strMot = "s" Or strMot = "-" Or strMot = "" Then
          strChaine = strChaine + strMot
        Else
          ' Sinon, ajouter le terme après un espace
          strChaine = strChaine + " " + strMot
        End If
      Else
        strChaine = strMot
      End If
    End Sub
     
    ' ---
    ' Recherche d'un mot équivalent à une valeur numérique
    ' ---
    '
    Function Equivalent(ByVal intValeur As Integer) As String
      Select Case intValeur
        Case Is < 21
          Equivalent = astrMot(intValeur)
        Case Else
          Equivalent = astrMot(18 + (intValeur / 10))
      End Select
    End Function
     
    ' ---
    ' Initialisation du tableau de mots
    ' ---
    '
    Sub InitialisationMots()
      ' Termes principaux
      astrMot(1) = "un"
      astrMot(2) = "deux"
      astrMot(3) = "trois"
      astrMot(4) = "quatre"
      astrMot(5) = "cinq"
      astrMot(6) = "six"
      astrMot(7) = "sept"
      astrMot(8) = "huit"
      astrMot(9) = "neuf"
      astrMot(10) = "dix"
      astrMot(11) = "onze"
      astrMot(12) = "douze"
      astrMot(13) = "treize"
      astrMot(14) = "quatorze"
      astrMot(15) = "quinze"
      astrMot(16) = "seize"
      astrMot(20) = "vingt"
      astrMot(21) = "trente"
      astrMot(22) = "quarante"
      astrMot(23) = "cinquante"
      astrMot(24) = "soixante"
     
      ' Termes spéciaux
      astrSpecial(CONV_ZERO) = "zéro"
      astrSpecial(CONV_MOINS) = "moins"
      astrSpecial(CONV_ET) = "et"
      astrSpecial(CONV_VIRGULE) = "virgule"
     
      ' Constantes liées aux nombres
      astrSpecial(CONV_60) = "soixante"
      astrSpecial(CONV_80) = "quatre-vingt"
      astrSpecial(CONV_1E2) = "cent"
      astrSpecial(CONV_1E3) = "mille"
      astrSpecial(CONV_1E6) = "million"
      astrSpecial(CONV_1E9) = "milliard"
    End Sub

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    Bonjour,
    peux-tu faire un impression d'écran de la fenêtre VBA lorsque le message d'erreur apparait ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Si tu utilises la fonction dans 'Valeur par défaut' d'une Zone de texte, il faut alors écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NbEnLettres([NomZoneTotalEnChiffres];"francs CFA";"centime";2)
    ( ';' au lieu de ',' en VBA)
    Par ailleurs, ne pas oublier de remplacer NomZoneTotalEnChiffres par le nom concerné dans le formulaire ou l'état.
    Un problème bien posé est à moitié résolu

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    en formation
    Inscrit en
    Octobre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Niger

    Informations professionnelles :
    Activité : en formation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 44
    Points : 33
    Points
    33
    Par défaut eatat de sorie d'une facture client
    bsr monsieur, je vous remercie pour l,aide que vous nous apportez,

    le message d'erreur est le suivant:

    erreur de compilation

    des constantes ,chaines de longueur fixe, tableaux,types définis par l'utilisateur et instructions declares ne sont
    pas autorises comme membres Public de modules d'objet


    nb; la ligne d'instruction qui est en erreur est;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const CONV_Zero as integer=1

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    Bonjour,
    Encore une fois: peux-tu faire un impression d'écran de la fenêtre VBA lorsque le message d'erreur apparait ?
    utilise l'icône entourée pour insérer l'image:

    Nom : _DVP_InsererImage.JPG
Affichages : 120
Taille : 17,8 Ko

    j'ai l'impression que le code n'a pas été inséré dans un Module standard.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    en formation
    Inscrit en
    Octobre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Niger

    Informations professionnelles :
    Activité : en formation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    bjr monsieur TEE, je vous remercie d'avoir voler a mon secour,
    je suis confu ce matin, il ne faut pas m'en vouloir.

    comment imprimerl'ecran du message d'erreur qui s'affiche.

    comment ouvrir le module standard dont vous avez parle

    mercie de votre bonne comprehension et bonne journee

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    Bonsoir,
    dès que le message apparait, appuyer sur Impr écran ou Prt Scrn en anglais, puis coller dans un éditeur d'images (Paint ou autre), enregistrer sous, etc...
    C'est quand même le minimum à savoir lorsque qu'on est developpeur.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. [AC-2007] etat de sortie d'une facture client
    Par babady dans le forum Access
    Réponses: 3
    Dernier message: 02/04/2018, 14h52
  2. [AC-2007] Etat de sortie d'une facture client
    Par babady dans le forum IHM
    Réponses: 10
    Dernier message: 09/12/2017, 06h57
  3. [V8] Quantité d 'articles dans une facture client
    Par hindbenessy dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 31/05/2016, 12h44
  4. Décrémenter article en stock depuis une facture client
    Par Ti-EN dans le forum Odoo (ex-OpenERP)
    Réponses: 5
    Dernier message: 28/03/2014, 13h57
  5. Sortie d'une facture sur excel
    Par ShortcutZ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/01/2006, 17h07

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