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
    bjr monsieur mes dames, je vous remercie infiniment de l'aide que vous nous apporte tjr,
    je vien vers vous pour demander une fois encore de l'aide'
    il s'ai d'une facture client, que je voudrais imprimer; maintenant je veu a ce que le montant total de la facture soient ecri en lettre au niveau du pied de page de la facture: par exemple;
    supposont que le montant total de la facture est 500.000 fcfa

    je veu a ce que les 500.000 fca soient ecri en lettre.( je veu dire le code vba )

    exemple: arretez la presente facture a la somme de : cinq cent milles francs cfa(500.000 )

    merci de votre bonne comprehension

  2. #2
    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

    Je te propose ce code à copier-coller dans un module
    à essayer par exemple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox NbEnLettres(12345.55, "Euro", "centime", 2)
    Un problème bien posé est à moitié résolu

  3. #3
    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 eatatde sortie d'unefactureclient
    bonjour , monsieut titi95,
    je suis tres ravi de m'avoir répondu,je vous remercie infiniment,
    mais vous n'avez pas peut etre bien compris le sens de ma question:
    supposons que le montant total de ma facture est par exemple 2.345.000 fcfa

    je veux a ce que ce montant apparaisse en toute lettre après la phrase suivante:



    arrête la pretente facture a la somme de : 2.345.000 fcfa

  4. #4
    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

    La fonction 'NbEnLettres' permet justement de transformer un nombre en chiffres en un nombre exprimé en lettres.
    Exemple : 123456 est transformé en cent vingt-trois mille quatre cent cinquante-six

    Cette fonction comporte 4 paramètres
    1er paramètre obligatoire : le nombre à convertir, en format texte ou nombre standard (le point est réservé à la décimale ! )
    2ème paramètre (facultatif) : l’unité principale, au singulier
    3ème paramètre (facultatif) : l’unité associée aux décimales, au singulier
    4ème paramètre (facultatif) : le nombre de décimales à prendre en compte pour l’affichage (2 si omis)

    Tu fais un copier-coller de tout le code dans un module (nota : la ligne (94) ajoutant un 's' à l'unité a été passée en commentaire pour éviter, dans ton cas, d'avoir un 's' inapproprié derrière CFA)
    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
    ' 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
    Pour la Zone de texte de l'état où tu veux faire apparaître le nombre en lettres, tu mets en Propriété/Données/Source contrôle (NomZoneTotalEnChiffres à remplacer par TON nom de zone)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NbEnLettres([NomZoneTotalEnChiffres], "franc CFA", "centime", 2)
    Un problème bien posé est à moitié résolu

Discussions similaires

  1. [AC-2007] Etat de sortie d'une facture client
    Par babady dans le forum IHM
    Réponses: 10
    Dernier message: 09/12/2017, 06h57
  2. Réponses: 0
    Dernier message: 30/08/2017, 16h26
  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