Re,
Ci dessous un extrait du code :
Je récupère les différents paramètres, je vérifie leur validité et
différents détails (taille, signe etc ...) puis je convertis le nombre
en alpha grâce à la fonction *cstr()*.
J'extrais ensuite mes groupes de chiffre avec la fonction *mid()* puis
les retransforme en nombre avec la fonction *cint()* pour continuer ma
moulinette.
Tu peux récupérer la macro entière ici
<http://www.crafe.com/telechargement/NombreEcritEnLettre.ods>
.
Salutations.
Fernand COSTA
'********************** Teste des paramètres reçus
if IsNumeric(vNombre) then
if vNombre > 999999999999.999 OR vNombre < (-999999999999.999) THEN
vMessageErr = "Nombre hors fourchette !"
goto TraitementErreur:
endif
else
vMessageErr = "Valeur non numérique !"
goto TraitementErreur:
endIf
if vNombre < 0 then
vSigne=false
vNombre=abs(vNombre)
else
vSigne=true
endif
vtravail=cstr(vNombre)
vlongueurnb=len(vtravail)
vpositionvirgule=instr(vtravail,",")
if vpositionvirgule=0 then
vpositionvirgule = vlongueurnb+1
end if
if vposition<0 or vposition>3 then
vmessageErr = "Nb de décimales > à 3 !"
goto traitementErreur:
end if
'********************** Décomposition du nombre
vpositiondepart=vpositionvirgule-12
vpositionfin=vpositiondepart+2
vlongueurgroupe=3
if vpositionfin>0 then
if vpositiondepart<1 then
vlongueurgroupe=vlongueurgroupe+vpositiondepart-1
vpositiondepart = 1
end if
vMilliard = cint(mid(vtravail,vpositiondepart,vlongueurgroupe))
end if
rem int (vNombre/1000000000)
vpositiondepart=vpositionvirgule-9
vpositionfin=vpositiondepart+2
vlongueurgroupe=3
if vpositionfin>0 then
if vpositiondepart<1 then
vlongueurgroupe=vlongueurgroupe+vpositiondepart-1
vpositiondepart = 1
end if
vMillion = cint(mid(vtravail,vpositiondepart,vlongueurgroupe))
end if
rem vMillion=int((vNombre-(vMilliard*1000000000))/1000000)
vpositiondepart=vpositionvirgule-6
vpositionfin=vpositiondepart+2
vlongueurgroupe=3
if vpositionfin>0 then
if vpositiondepart<1 then
vlongueurgroupe=vlongueurgroupe+vpositiondepart-1
vpositiondepart = 1
end if
vMille = cint(mid(vtravail,vpositiondepart,vlongueurgroupe))
end if
vpositiondepart=vpositionvirgule-3
vpositionfin=vpositiondepart+2
vlongueurgroupe=3
if vpositionfin>0 then
if vpositiondepart<1 then
vlongueurgroupe=vlongueurgroupe+vpositiondepart-1
vpositiondepart = 1
end if
vUnite = cint(mid(vtravail,vpositiondepart,vlongueurgroupe))
end if
vIntermediaire=mid(vtravail,vpositionvirgule+1,vposition)
IF len(vIntermediaire<vposition) then
do while len(vIntermediaire)<vposition
vIntermediaire=vIntermediaire+"0"
christianwtd a écrit :
Fernand COSTA a écrit :
Bonjour,
J'ai rencontré le même problème dans ma macro d'écriture de nombre en
toute lettre, et je me suis résigné à traiter le problème en passant
par de l'alphanumérique. Même en utilisant les int(x) et autre
arrondi, je retrouvai, mais pas toujours, des soucis d'arrondi.
Une fois en alpha, plus de soucis !!
Salutations.
Fernand COSTA
Bonjour Fernand,
alphanumérique ? Tu peux m'en dire plus...
Bon surf,
Christian