FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Montant en toutes lettres Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Montant en toutes lettres Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Montant en toutes lettres Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Montant en toutes lettres Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Montant en toutes lettres Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Montant en toutes lettres Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Montant en toutes lettres Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Montant en toutes lettres Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Montant en toutes lettres Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Montant en toutes lettres Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Montant en toutes lettres Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Montant en toutes lettres Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Montant en toutes lettres Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Montant en toutes lettres Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Montant en toutes lettres Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G Double SIM à 599€
599 €
Voir le deal

 

 Montant en toutes lettres

Aller en bas 
3 participants
AuteurMessage
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 2:34

Salut tout le monde !

Voici un sous programme qui peut être utile pour certains.
Il s’agit de transformer un montant en chiffres en un montant en lettres tout en respectant la langue française, SVP !
* Le trait d’union dans 17 (DIX-SEPT) etc.
* Le ET dans 21 (VINGT ET UN) etc.
* Le S dans 80 (QUATRE-VINGTS), mais il n’y a pas d’S dans 81 (QUATRE-VINGT-UN)
* CENT prend S au pluriel quand il n’est pas suivi d’autres valeurs, comme 400 (QUATRE CENTS), mais 410 (QUATRE CENT DIX) ne prend pas d’S
* MILLE est toujours invariable (MILLE, DEUX MILLE, TROIS MILLE etc.)
* MILLION prend un S au pluriel
* On dit UN MILLION, mais on ne dit pas UN CENT ou UN MILLE
Toutes ces subtilités sont prises en charge dans le programme.
Le programme traite les nombres :
De 0.01 (UN CENTIME)
Jusqu’à 999999999.99
NEUF CENT QUATRE-VINGT-DIX-NEUF MILLIONS NEUF CENT QUATRE-VINGT-DIX-NEUF MILLE NEUF CENT QUATRE-VINGT-DIX-NEUF EUROS ET QUATRE-VINGT-DIX-NEUF CENTIMES.
Ce sous programme peut être intégré dans un programme plus important où il est question d'imprimer un montant en toutes lettres (par exemple une facture ...)


Code:

' ******************************************************************************
'
'                  Montant en toutes lettres
'
'                        Par Papydall
'
' ******************************************************************************

' Ecriture en toutes lettres d'un montant
' de (0.01) --> un centime
' à (999999999.99) -->
' NEUF CENT QUATRE-VINGT-DIX-NEUF MILLIONS NEUF CENT QUATRE-VINGT-DIX-NEUF MILLE
' NEUF CENT QUATRE-VINGT-DIX-NEUF EUROS ET QUATRE-VINGT-DIX-NEUF CENTIMES
'
' ******************************************************************************
dim montant,kk$,ss$,xx$,zz$,dp,cc$,rr$,tt$,cc,uu,dd,du
dim dd$(8),uu$(19),i

label ChiffresLettres,TroisChiffresLettres

width 0 ,1100

' **** Pour verifier l'algorithme

input "  Entrez le montant en chiffres  de 0.01 à 999999999.99 : "; montant
gosub ChiffresLettres
 kk$ = "****" + kk$ + "****"
 print : print kk$
end

ChiffresLettres:
' ******************************************************************************
' Initialisation des tables
' *** UU$() --> Table des unités: Pour faciliter les traitements,les valeurs 1
'    à 19 sont groupées comme "unités" !
' *** DD$() --> Table des dizaines : 70 et 90 sont traités à part

for i = 1 to 19 : read uu$(i) : next i

data "UN","DEUX","TROIS","QUATRE","CINQ","SIX","SEPT","HUIT","NEUF","DIX","ONZE"
data "DOUZE","TREIZE","QUATORZE","QUINZE","SEIZE","DIX-SEPT","DIX-HUIT"
data "DIX-NEUF"

dd$(2) = "VINGT" : dd$(3) = "TRENTE" : dd$(4) = "QUARANTE"
dd$(5) = "CINQUANTE" : dd$(6) = "SOIXANTE" : dd$(8) = "QUATRE-VINGT"

' **** Recherche de la position du point décimal dans le montant

xx$ = "" : dp = 0 : ss$ = str$(montant)
for i = 1 to len(ss$)
  if mid$(ss$,i,1) = "." then dp = i : exit_for
next i

' **** Traitement

if dp <> 0
  zz$ = mid$(ss$,1,dp-1) : tt$ = mid$(ss$,dp+1,3)
  else : zz$ = ss$ : tt$ = "000"
 end_if

while len(zz$) < 9 : zz$ = "0" + zz$ : end_while

' **** Tranche des millions

cc$ = mid$(zz$,1,3)
if cc$ = "001"
  xx$ = "UN MILLION"
  else
  if cc$ <> "000" then gosub TroisChiffresLettres : xx$ = rr$ + " MILLIONS"
end_if

' **** Tranche des mille

cc$ = mid$(zz$,4,3)

if cc$ <> "000"
  gosub TroisChiffresLettres
  if rr$ = " UN" then rr$ = ""
  xx$ = xx$ + rr$ + " MILLE"
end_if

' **** Tranche des centaines

cc$ = mid$(zz$,7,3)
if (val(zz$) <> 0) and (zz$ <> "000000001")
  gosub TroisChiffresLettres
  if (xx$ = "UN MILLION" or right$(xx$,8)="MILLIONS")and rr$ = "" then rr$="D'"
  xx$ = xx$ + "  " + rr$ + " EUROS"
end_if
if zz$ = "000000001" then xx$ = "UN EURO"
if (val(zz$) = 0) and (val(tt$) = 1) then xx$ = "UN CENTIME"
if val(tt$) <> 0
  cc$ = tt$
  if len(cc$) = 1 then cc$ = "0" + cc$ +"0"
  if len(cc$) = 2 then cc$ = "0" + cc$
  if not(val(zz$) = 0 and val(cc$) = 1) then gosub TroisChiffresLettres
  if (val(zz$) = 0) and (val(cc$) > 1)
      xx$ = rr$ + " CENTIMES" : gosub TroisChiffresLettres
  else
      if rr$ <> "" then xx$ = xx$ + " ET " + rr$ + " CENTIMES"
      if rr$ = "1" then xx$ = xx$ + " ET " + rr$ + " CENTIME"
  end_if
end_if

' *** Enlever les espaces superflus de la chaine contenant le montant

kk$ = ""
for i = 1 to len(xx$)-1
if not((mid$(xx$,i,1) = " ")and((mid$(xx$,i+1,1) = " ")or(mid$(xx$,i+1,1)="-")))
  kk$ = kk$ + mid$(xx$,i,1)
end_if
next i
if mid$(xx$,len(xx$),1) <> " " then kk$ = kk$ + mid$(xx$,len(xx$),1)
if mid$(xx$,1,1) = " " then kk$ = mid$(kk$,2,len(kk$))
return

' *** Codage d'un nombre de 3 chiffres  en lettres
TroisChiffresLettres:
rr$ = ""
cc = val(mid$(cc$,1,1)) : dd = val(mid$(cc$,2,1))
uu = val(mid$(cc$,3,1)) : du = val(mid$(cc$,2,2))

if cc = 1 then rr$ = rr$ + " CENT"
if (cc > 1) and (du = 0)then rr$ = rr$ + " " + uu$(cc) + " CENTS"
if (cc > 1) and (du <> 0) then rr$ = rr$ + " " + uu$(cc) + " CENT"
if du = 0 then return
if (0 < du) and (du < 20) then rr$ = rr$ + " " + uu$(du) : return
if ((69 < du) and (du < 80)) or ((89 < du) and (du < 100))
  rr$ = rr$ + " " + dd$(dd-1) + "-" + uu$(10+uu) : return
end_if
rr$ = rr$ + " " + dd$(dd)
if (uu = 0) and (dd = 8) then rr$ = rr$ + "S"
if uu = 0 then return
if (uu = 1) and (( dd = 2) or (dd = 3) or (dd = 4) or(dd = 5) or (dd = 6))
  rr$ rr$ + " ET " + uu$(uu) : return
end_if
if (uu > 1) and (dd = 0) then rr$ = rr$ + " " + uu$(uu) : return
rr$ = rr$ + "-" + uu$(uu)
return
' ****** Fin *****

PS : Je ne peux pas aller plus loin dans la limite supérieure du montant : ma fortune actuelle ne dépasse pas ce plafond, hélas !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 7:23

bonjour papydall, Smile
Très interressant ton petit sous programme et surtout très utile. Je le met de coté car il pourrait bien me servir un jour!
Si tu tapes directement entrée ou une lettre ton programme plante; tu aurais du utiliser d'autres instructions à la place de input comme message input ou alors tester ce qui est entré au clavier avec l'instruction numeric(v$). Mais bon, c'est un détail, le principal c'est que c'est un programme utile que chacun peut modifier comme il l'entend pour ses propres besoins.
A bientôt Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 10:36

Beau programme papydall. C'est clair que l'on peut faire quelques petits contrôle d'erreur de saisie ou de manipulation (comme vérifier que si la chaine saisie n'est pas "0", "00","0.0"; "0.00"; "0,0" ou "0,00" la valeur de la chaine saisie est diférente à 0 par exemple)
On peut faire un check du point ou de la virgule aussi comme séparateur
En testant s'il y a plusieurs points ou plusieurs virgules, en éviterait les confusions pour nos amis anglophones qui l'utilisent comme séparateur de millier, mais bon, l'énnoncé est clair, ils peuvent aussi faire attention.
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 10:46

Bonjour Bignono,
Bonjour Jicehel,
Bonjour tout le monde !
Ce que vous dites est certainement vrai !
L’INPUT ne sert qu’à vérifier le programme. Chacun peut l’adapter à sa guise.
En fait, dans mon intention, le « montant » sera fourni par le programme qui l’utilisera. Donc, le montant, serait calculé et vérifié avant d’utiliser le sous programme.
A+

PS :

Le français n’est pas ma langue maternelle, mais j’essaye toujours de m’exprimer avec le moins de fautes possible.

Pour une utilisation fiable, il faut vérifier ce sous programme avec différentes valeurs et voir s'il n'y a pas des petites incorrections. Moi-même, je ne l’ai vérifié que sommairement. Mais je pense que c'est correct!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 13:21

Une petite correction, en principe on écrit cinq millions d'euros (sans espace entre l'apostrophe et euros)
Il faudrait donc modifier le bout de code du test par:
Code:

  if (xx$ = "UN MILLION" or right$(xx$,8)="MILLIONS")and rr$ = ""
      xx$=xx$+" D'EUROS"
  else
      xx$ = xx$ + "  " + rr$ + " EUROS"
  end_if
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 16:18

OK Jicehel!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres Empty

Revenir en haut Aller en bas
 
Montant en toutes lettres
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Afficher un nombre en toutes lettres
» question de math et de lettres.
» Traduire des nombres en lettres.
» Traduction des nombres en lettres.
» exportation de fichiers texte et lettres accentuées

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: