Convertir une date en toute lettre

Le
FEUZ TOFF
Bonjour
Je voudrais convertir 1 champ de type Date en toute lettre
exple: 26 septembre 1985 devient vingt six septembre mil neuf cent quatre vingt cin
c'est pour un Eta
Merçi de votre aide
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Raymond [mvp]
Le #5081081
Bonjour.

ça me donne une idée à développer.
à ma connaissance ça n'existe pas, mais tu peux le faire en 3 sequences:
conversion du jour, sommes en lettres
le mois , ça doit aller
conversion de l'année , comme en lettres

ci-dessous une fonction de conversion que tu appelles par:
convertir ( day(me.madate)," ", " ", " ")
convertir ( Year(me.madate)," ", " ", " ")

le tout doit faire:
convertir ( day(me.madate)," ", " ", " ") & format(me.madate, "MMMM") &
convertir ( Year(me.madate)," ", " ", " ")

en espérant avoir donné des idées.


Option Compare Database
Option Explicit

'Cette fonction permet de convertir un nombre en toutes lettres dans la
langue française.
'Cette fonction retournera le nombre écrit en toutes lettres suivi du nom de
la devise stipulée dans l'argument "Devise". Dim varnum, varnumD,
varnumU, resultat, varlet
'========================================================================= 'Les devises ou unités peuvent être passées en paramètres (Euros par défaut)
ainsi que le texte séparant les millions entiers ( d' pour euros et de pour
francs par exemple).
'la valeur maximum de la somme à convertir est 304.898.034,47
'Tout type d'unité est accepté (euro, franc, hectare ...)
'======================================== ' Modifié par et pour access.seneque.free.fr

Public Function Convertir(Somme As Double _
, Optional Devise_Unité = "Euro" _
, Optional Devise_Centimes = "Cent" _
, Optional Devise_De = " d'" _
) As String
Dim stde As String
Dim stEspace As String
Dim stDevise As String
Dim stCentieme As String
Dim varnum, varnumD, varnumU, resultat, varlet

stEspace = " "

If Somme > 304898034.47 Or Somme < -304898034.47 Then
Convertir = "$$ Erreur - montant > 304898034,47 ."
Exit Function
End If
stde = Devise_De
stDevise = Devise_Unité
stCentieme = Devise_Centimes

Static Chiffre(1 To 19)
Chiffre(1) = "un"
Chiffre(2) = "deux"
Chiffre(3) = "trois"
Chiffre(4) = "quatre"
Chiffre(5) = "cinq"
Chiffre(6) = "six"
Chiffre(7) = "sept"
Chiffre(8) = "huit"
Chiffre(9) = "neuf"
Chiffre(10) = "dix"
Chiffre(11) = "onze"
Chiffre(12) = "douze"
Chiffre(13) = "treize"
Chiffre(14) = "quatorze"
Chiffre(15) = "quinze"
Chiffre(16) = "seize"
Chiffre(17) = "dix-sept"
Chiffre(18) = "dix-huit"
Chiffre(19) = "dix-neuf"
Static dizaine(1 To 8)
dizaine(1) = "dix"
dizaine(2) = "vingt"
dizaine(3) = "trente"
dizaine(4) = "quarante"
dizaine(5) = "cinquante"
dizaine(6) = "soixante"
dizaine(8) = "quatre-vingt"

'traitement du cas 0 virgule quelque-chose
If Somme >= 1 Then
resultat = ""
Else
If Somme < 0 Then
resultat = "moins"
Somme = -Somme
Else
resultat = "zéro"
GoTo FinTraitement
End If
End If

'traitement des millions
varnum = Int(Somme / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet + " million"
If varlet <> "un" Then: resultat = resultat + "s"
End If

'traitement des milliers
varnum = Int(Somme) Mod 1000000
varnum = Int(varnum / 1000)
If varnum > 0 Then
GoSub centaine_dizaine
If varlet <> "un" Then: resultat = resultat + " " + varlet
resultat = resultat + " mille"
End If

'traitement des centaines et dizaines
varnum = Int(Somme) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet
End If
resultat = LTrim(resultat)
varlet = Right$(resultat, 4)

'traitement du "s" final pour vingt et cent et du "d'" pour million
Select Case varlet
Case "cent", "ingt"
If Somme <> 20 And Somme <> 100 Then
resultat = resultat + "s"
End If
Case "lion", "ions"
resultat = resultat + stde
stEspace = ""
End Select

FinTraitement:
resultat = resultat + stEspace + stDevise
If Somme > 1 Then: resultat = resultat + "s"

'traitement les centièmes
varnum = Int((Somme - Int(Somme)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " " + stCentieme
If varnum > 1 Then: resultat = resultat + "s"
End If

' conversion 1ère lettre en majuscule
resultat = UCase(Left(resultat, 1)) + Right(resultat, Len(resultat) - 1)

'renvoi du résultat de la fonction et fin de la fonction
Convertir = resultat
Exit Function

'sous programme
centaine_dizaine:

varlet = ""

'traitement des centaines
If varnum >= 100 Then
varlet = Chiffre(Int(varnum / 100))
varnum = varnum Mod 100
If varlet = "un" Then
varlet = "cent "
Else
varlet = varlet + " cent "
End If
End If

'traitement des dizaines
If varnum <= 19 Then
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet varlet & " "
End If
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return

End Function







--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"FEUZ TOFF" news:
Bonjour,
Je voudrais convertir 1 champ de type Date en toute lettre:
exple: 26 septembre 1985 devient vingt six septembre mil neuf cent quatre
vingt cinq

c'est pour un Etat
Merçi de votre aide


Raymond [mvp]
Le #5081071
.../...
petite précision:
le 1er du mois n'est pas géré (normal dans l'état actuel de la fonction)

modifie l'appel de la fonction comme ceci:
Convertir(Day(Me.Madate), " ", " ", " ") & Format(Me.Madate, "MMMM") & " "
& Convertir(Year(Me.Madate), " ", " ", " ")
(rajouter un espace entre le mois et l'année)

il faut modifier un tout petit peu la fonction convertir comme ci-dessous:
(pour supprimer les s en fin de somme)

Option Compare Database
Option Explicit

'Cette fonction permet de convertir un nombre en toutes lettres dans la
langue française.
'Cette fonction retournera le nombre écrit en toutes lettres suivi du nom de
la devise stipulée dans l'argument "Devise". Dim varnum, varnumD,
varnumU, resultat, varlet
'========================================================================= 'Les devises ou unités peuvent être passées en paramètres (Euros par défaut)
ainsi que le texte séparant les millions entiers ( d' pour euros et de pour
francs par exemple).
'la valeur maximum de la somme à convertir est 304.898.034,47
'Tout type d'unité est accepté (euro, franc, hectare ...)
'======================================== ' Modifié par et pour access.seneque.free.fr

Public Function Convertir(Somme As Double _
, Optional Devise_Unité = "Euro" _
, Optional Devise_Centimes = "Cent" _
, Optional Devise_De = " d'" _
) As String
Dim stde As String
Dim stEspace As String
Dim stDevise As String
Dim stCentieme As String
Dim varnum, varnumD, varnumU, resultat, varlet

stEspace = " "

If Somme > 304898034.47 Or Somme < -304898034.47 Then
Convertir = "$$ Erreur - montant > 304898034,47 ."
Exit Function
End If
stde = Devise_De
stDevise = Devise_Unité
stCentieme = Devise_Centimes

Static Chiffre(1 To 19)
Chiffre(1) = "un"
Chiffre(2) = "deux"
Chiffre(3) = "trois"
Chiffre(4) = "quatre"
Chiffre(5) = "cinq"
Chiffre(6) = "six"
Chiffre(7) = "sept"
Chiffre(8) = "huit"
Chiffre(9) = "neuf"
Chiffre(10) = "dix"
Chiffre(11) = "onze"
Chiffre(12) = "douze"
Chiffre(13) = "treize"
Chiffre(14) = "quatorze"
Chiffre(15) = "quinze"
Chiffre(16) = "seize"
Chiffre(17) = "dix-sept"
Chiffre(18) = "dix-huit"
Chiffre(19) = "dix-neuf"
Static dizaine(1 To 8)
dizaine(1) = "dix"
dizaine(2) = "vingt"
dizaine(3) = "trente"
dizaine(4) = "quarante"
dizaine(5) = "cinquante"
dizaine(6) = "soixante"
dizaine(8) = "quatre-vingt"

'traitement du cas 0 virgule quelque-chose
If Somme >= 1 Then
resultat = ""
Else
If Somme < 0 Then
resultat = "moins"
Somme = -Somme
Else
resultat = "zéro"
GoTo FinTraitement
End If
End If

'traitement des millions
varnum = Int(Somme / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet + " million"
If varlet <> "un" Then: resultat = resultat ' + "s"
End If

'traitement des milliers
varnum = Int(Somme) Mod 1000000
varnum = Int(varnum / 1000)
If varnum > 0 Then
GoSub centaine_dizaine
If varlet <> "un" Then: resultat = resultat + " " + varlet
resultat = resultat + " mille"
End If

'traitement des centaines et dizaines
varnum = Int(Somme) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet
End If
resultat = LTrim(resultat)
varlet = Right$(resultat, 4)

'traitement du "s" final pour vingt et cent et du "d'" pour million
Select Case varlet
Case "cent", "ingt"
If Somme <> 20 And Somme <> 100 Then
resultat = resultat '+ "s"
End If
Case "lion", "ions"
resultat = resultat + stde
stEspace = ""
End Select

FinTraitement:
resultat = resultat + stEspace + stDevise
If Somme > 1 Then: resultat = resultat '+ "s"

'traitement les centièmes
varnum = Int((Somme - Int(Somme)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " " + stCentieme
If varnum > 1 Then: resultat = resultat '+ "s"
End If

' conversion 1ère lettre en majuscule
resultat = UCase(Left(resultat, 1)) + Right(resultat, Len(resultat) - 1)

'renvoi du résultat de la fonction et fin de la fonction
Convertir = resultat
Exit Function

'sous programme
centaine_dizaine:

varlet = ""

'traitement des centaines
If varnum >= 100 Then
varlet = Chiffre(Int(varnum / 100))
varnum = varnum Mod 100
If varlet = "un" Then
varlet = "cent "
Else
varlet = varlet + " cent "
End If
End If

'traitement des dizaines
If varnum <= 19 Then
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet varlet & " "
End If
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return

End Function
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
Publicité
Poster une réponse
Anonyme