Bonjour,
A l'aide d'une macro... (il n'y a apparemment pas de fonctions pour cela)
Essaye celle ci, je pense qu'elle fonctionne http://www.cathyastuce.com/excel/astuces.php#convertir
Sinon juste pour vérifier l'orthographe exacte d'un nombre en lettre il y a http://www.leconjugueur.com (voir le lien a gauche)
Bonne journée.
2006-09-07 23:25:30
·
answer #1
·
answered by Catcha 6
·
0⤊
0⤋
très bonne question, j'ai une DLL qui fait ça, c'est pas trop dur de l'interfacer sur excel.
voici le source en Delphi de la DLL :
library SPFUTILS;
uses
SysUtils,
Classes,
Math,
Commdlg,
Windows;
{$E DLL}
Procedure NombreEcrit(Nombre:double; var Ecrit; var LenEcrit:longint); stdcall;
const
Unite:array[1..19] of string=(
'un','deux','trois','quatre','cinq','six','sept','huit',
'neuf','dix','onze','douze','treize','quatorze','quinze',
'seize','dix sept','dix huit','dix neuf');
Dizaine:array[1..8] of string=(
'dix','vingt','trente','quarante','cinquante','soixante',
'sd','quatre vingt');
Exposant:array[1..3] of string=('mille','million',
'milliard');
var
Result:string;
nb, {reste à traiter}
nb3, {nb sur 3 chiffres courant}
nbC, {nb centaines}
nbD, {nb dizaines}
nbU, {unités restantes sur 3}
base:int64;
ExpCour:integer;
begin
nb:=round(nombre);
Result:='';
ExpCour:=0;
Base:=1;
while nb div base >999 do
begin
inc(ExpCour);
Base:=Base*1000;
end;
if ExpCour>3 then
begin
result:='Trop grand';
move(Result[1],Ecrit,length(Result));
LenEcrit:=length(Result);
exit;
end;
while Expcour>=0 do
begin
nb3:=nb div base;
{ centaines }
nbC:=nb3 div 100;
nbU:=nb3 mod 100;
if nbC>0 then
begin
if nbC>1 then
result:=result+' '+Unite[nbC];
result:=result+' cent'+
copy('s',1,ord((nbC>1) and (nbU=0)));
end;
{ dizaines }
nbD:=nbU div 10;
if nbD in [1,7,9] then dec(nbD);
nbU:=nbU-10*nbD;
if nbD>0 then
result:=result+' '+Dizaine[nbD]+
copy('s',1,ord((nbD=8) and (nbU=0)));
if (nbD in [2..6]) and (nbU mod 10=1) then
result:=result+' et';
{ unités }
if (nbU>0) and not((nb3=1) and (ExpCour=1)) then
result:=result+' '+Unite[nbU];
{ exposant }
if (ExpCour>0) and (nb3<>0) then
result:=result+
' '+exposant[expcour]+
copy('s',1,ord((ExpCour>1) and (nb3>1)));
dec(ExpCour);
nb:=nb mod base;
Base:=Base div 1000
end;
result:=copy(result,2,1000);
if length(Result)>LenEcrit then
result:=copy('Buffer too small',1,lenecrit);
move(Result[1],Ecrit,length(Result));
LenEcrit:=length(Result);
end;
exports
NombreEcrit;
begin
end.
ensuite on peut la déclarer dans un module de classes/
le reste est facile...
2006-09-08 07:10:10
·
answer #8
·
answered by Ramis V 7
·
0⤊
1⤋