
SUBROUTINE Recherche_SommeLettre(Montant,W_GestEuro,Libelle)
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
    
	* ATTENTION : ncessaire que le montant pass en paramtres soit sur 2 dcimales (sinon boucle infinie !)

	Montant = Montant"R2"


    *marche pour 7 chiffres avant la virgule + 2 apres
    
    W_LibSomme = ""
    IF Montant < 0 THEN
        W_LibSomme = "moins "
        Montant = Montant[2,LEN(Montant)-1]
    END
    W_Affect = "False"
    W_VirgPass = "False"
    W_AvVirgule = INDEX(Montant,",",1)
    IF W_AvVirgule <> 0 THEN
        W_Long = Montant[1, W_AvVirgule - 1]
        Montant = STR("0",7 - LEN(W_Long)) : Montant
        W_Longueur = LEN(Montant) - (LEN(W_AvVirgule) + 2)
    END ELSE
        Montant = STR("0",7 - LEN(Montant)) : Montant
        W_Longueur = LEN(Montant)
    END
   

    i = 1
    
    IF W_Longueur <= 2 THEN
        W_Rang = W_Longueur
    END ELSE
        W_Rang = 1
    END

    LOOP
    WHILE W_Rang # 0
        W_PrecChar2 = Montant[i - 2, 1]
        W_PrecChar = Montant[i - 1, 1]
        W_Char = Montant[i, 1]
        W_NewChar = Montant[i + 1, 1]
        W_ProchChar = Montant[i + 2, 1]
        W_ProchChar2 = Montant[i + 3, 1]
        
**        IF W_Char = "0" AND W_NewChar = "0" AND W_ProchChar = "0" AND W_ProchChar2 = "0" THEN W_Affect = "False"
        
        IF W_Char <> "," THEN
        
            IF W_Char <> "0" OR W_Affect = "True" THEN
                IF W_VirgPass = "False" THEN W_Affect = "True"
                GOSUB Gestion_Chiffre
                
                IF (W_Rang = 2 OR W_Rang = 5) AND W_Char <> "1" AND W_Char <> "0" AND W_Longueur > 2 THEN
                    IF W_Char <> "1" AND (W_NewChar <> "0" OR W_ProchChar <> "0") THEN
                        W_LibSomme = W_LibSomme : W_Somme : " cent "
                    END ELSE
                        W_LibSomme = W_LibSomme : W_Somme : " cents "
                        **W_LibSomme = W_LibSomme : W_Somme : " centimes "
                    END
                END ELSE
                    IF W_Rang = 4 AND W_Longueur > 3 THEN
                        IF TRIMB(W_LibSomme) <> W_Somme THEN
                            W_LibSomme = W_LibSomme : W_Somme : " mille "
                        END ELSE
                            W_LibSomme = TRIMB(W_LibSomme) : " mille "
                        END
                    END ELSE
                        IF W_Rang = 1 AND W_Longueur > 3 THEN
                            IF W_Char <> 1 THEN
                                W_LibSomme = W_LibSomme : W_Somme : " millions "
                            END ELSE
                                W_LibSomme = W_LibSomme : W_Somme : " million "
                            END
                        END ELSE
                            IF W_NewChar = "0" AND W_ProchChar = "0" AND W_Rang = 2 THEN
                                W_LibSomme = W_LibSomme : W_Somme : " mille "
                            END ELSE
                                W_LibSomme = W_LibSomme : W_Somme 
                            END
                        END
                    END
                END
            END ELSE
                IF W_Longueur = 1 THEN
                    W_LibSomme = W_LibSomme : "zero "
                END
            END
            
            IF INT(W_AvVirgule) # 0 THEN
                IF INT(W_Rang) >= LEN(Montant) - 1 THEN
                    IF INT(Montant[LEN(Montant) - 1,2]) <> 0 THEN
                        IF INT(Montant[LEN(Montant) - 1,2]) < 10 THEN
                            W_Rang = W_Rang + 1
                            W_Char = W_NewChar
                            GOSUB Gestion_Chiffre
                            IF W_GestEuro = "False" THEN
                                W_LibSomme = W_LibSomme : W_Somme : " centimes "
                            END ELSE
                               IF INDEX(W_LibSomme : W_Somme,"euro et un",1) # 0 OR INDEX(W_LibSomme : W_Somme,"euros et un",1) # 0 THEN
                                  W_LibSomme = W_LibSomme : W_Somme : " centime "
                               END ELSE
                                  W_LibSomme = W_LibSomme : W_Somme : " centimes "
                               END
                            END
*                Exit Do
*  Passage de VB  Pick : Exit devient GOTO 
			GOTO FinSub1
                        END
                    END
                    IF W_Rang = LEN(Montant) THEN
                        IF W_GestEuro = "False" THEN
                            W_LibSomme = W_LibSomme : " centimes"
                        END ELSE
                           IF INDEX(W_LibSomme : W_Somme,"euro et un",1) # 0 OR INDEX(W_LibSomme : W_Somme,"euros et un",1) # 0 THEN
                              W_LibSomme = W_LibSomme : " centime"
			   END ELSE
                              W_LibSomme = W_LibSomme : " centimes"
			   END
                        END
*                Exit Do
*  Passage de VB  Pick : Exit devient GOTO 
			GOTO FinSub1
                    END
                END
            END

            IF INT(W_Rang) = INT(W_Longueur) THEN
                IF TRIM(W_LibSomme) = "" AND W_Char = "0" THEN W_LibSomme = W_LibSomme : "zero "
                IF W_GestEuro = "False" THEN
                    W_LibSomme = W_LibSomme : " francs "
                END ELSE
                   IF W_LibSomme = "zero " OR W_LibSomme = "un" THEN
                      W_LibSomme = W_LibSomme : " euro "
                   END ELSE
                      W_LibSomme = W_LibSomme : " euros "
                   END
                END
                IF W_AvVirgule = 0 THEN
*                Exit Do
*  Passage de VB  Pick : Exit devient GOTO 
			GOTO FinSub1
                END ELSE
                    IF W_Rang = LEN(Montant) THEN
*                Exit Do
*  Passage de VB  Pick : Exit devient GOTO 
			GOTO FinSub1
                    END
                END
            END
        END ELSE
            W_Affect = "False"
            W_VirgPass = "True"
            IF INT(Montant[9,LEN(Montant)-9 + 1]) # 0 THEN
                W_LibSomme = W_LibSomme : "et "
            END ELSE
*                Exit Do
*  Passage de VB  Pick : Exit devient GOTO 
			GOTO FinSub1
            END
        END
        
        i = i + 1
        W_Rang = i
        
*        Debug.Print Mid(Montant, i, 1)
*        Debug.Print W_LibSomme
        W_Somme = ""
    REPEAT
FinSub1:
Libelle = W_LibSomme
RETURN

Gestion_Chiffre:
    BEGIN CASE 
        CASE W_Char = 0
        CASE W_Char = 1
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                IF W_NewChar = 0 THEN
                    W_Somme = "dix "
**                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END ELSE
                    GOSUB Dizaine
                END
            END ELSE
                IF (W_Rang = 2 OR W_Rang = 5) AND W_Longueur <> 1 THEN
                    IF W_NewChar = 0 THEN
                        IF Montant[W_Rang, 1] = "" THEN
                            W_Somme = "centimes "
                        END ELSE
                            W_Somme = "cent "
                        END
                    END ELSE
                        W_Somme = "cent "
                    END
                END ELSE
                    IF W_Rang <> 4 THEN
                        W_Somme = "un"
                    END ELSE
                        IF W_PrecChar <> "0" OR W_PrecChar2 <> "0" THEN
                            W_Somme = "un"
                        END
                    END
                END
            END
        CASE W_Char = 2
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                W_Somme = "vingt "
*                IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
            END ELSE
                W_Somme = "deux"
            END
        CASE W_Char = 3
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                W_Somme = "trente "
*                IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
            END ELSE
                W_Somme = "trois"
            END
        CASE W_Char = 4
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                W_Somme = "quarante "
*                IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
            END ELSE
                W_Somme = "quatre"
            END
        CASE W_Char = 5
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                W_Somme = "cinquante "
*                IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
            END ELSE
                W_Somme = "cinq"
            END
        CASE W_Char = 6
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                W_Somme = "soixante "
*                IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
            END ELSE
                W_Somme = "six"
            END
        CASE W_Char = 7
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                IF W_NewChar = 0 THEN
                    W_Somme = "soixante-dix "
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END ELSE
                    GOSUB Dizaine
                    W_Somme = "soixante-" : W_Somme
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END
            END ELSE
                W_Somme = "sept"
            END
        CASE W_Char = 8
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                IF W_NewChar = 0 THEN
                    W_Somme = "quatre-vingts "
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END ELSE
                    W_Somme = "quatre-vingt "
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END
            END ELSE
                W_Somme = "huit"
            END
        CASE W_Char = 9
            IF W_Rang = 3 OR W_Rang = 6 OR W_Rang = 9 THEN
                IF W_NewChar = 0 THEN
                    W_Somme = "quatre-vingt-dix"
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END ELSE
                    GOSUB Dizaine
                    W_Somme = "quatre-vingt-" : W_Somme
*                    IF W_NewChar = "0" THEN W_Rang = W_Rang + 1
                END
            END ELSE
                W_Somme = "neuf"
            END
    END CASE
RETURN

Dizaine:
    BEGIN CASE 
        CASE W_NewChar = 1
            W_Somme = "onze"
        CASE W_NewChar = 2
            W_Somme = "douze"
        CASE W_NewChar = 3
            W_Somme = "treize"
        CASE W_NewChar = 4
            W_Somme = "quatorze"
        CASE W_NewChar = 5
            W_Somme = "quinze"
        CASE W_NewChar = 6
            W_Somme = "seize"
        CASE W_NewChar = 7
            W_Somme = "dix-sept"
        CASE W_NewChar = 8
            W_Somme = "dix-huit"
        CASE W_NewChar = 9
            W_Somme = "dix-neuf"
    END CASE
        i = i + 1
        W_Rang = i
RETURN
RETURN
