Résultats de 1 à 3 sur 3

Sujet : Formater une variable date insérée dans le texte d'un état access

  1. #1

    Formater une variable date insérée dans le texte d'un état access

    Bonjour,
    Dans un état access, j'ai renseigné un champ de données comme ceci : ="Le " & [date_depot_sav] &" je vous ai envoyé un courrier pour etc ..."
    Dans l'état il s'affiche ainsi :
    Le 14/09/2013 09:32:27 je vous ai envoyé un courrier pour etc ...
    Comment faire pour donner un format à la date ???
    Je voudrais qu'il s'affiche comme cela :
    Le lundi 14 septembre je vous ai envoyé un courrier pour etc ...
    Merci d'avance pour votre aide.

  2. #2
    Bonjour,

    Dans un module :
    Code:
    '***********************************************************************************************************
    '   Sert à transposer une date en toutes lettres
    '***********************************************************************************************************
    Function fDte_Lettre(dtm As Date) As String
    
    
        Dim strJour As String
        Dim strMois As String
        Dim strAn As String
    
    
        strJour = NbVersTexte(Format(dtm, "dd"))
        strMois = CStr(Format(dtm, "mmmm"))
        strAn = NbVersTexte(Format(dtm, "yyyy"))
        fDte_Lettre = "Le " & Format(dtm, "dddd ") & strJour & " " & strMois & " " & strAn
    End Function
    
    
    '***********************************************************************************************************
    '   Transforme un nombre en lettres
    '***********************************************************************************************************
    Public Function NbVersTexte(ValNum As Double) As String
    
    
        Static Unites() As String
        Static Dixaines() As String
        Static LesDixaines() As String
        Static Milliers() As String
       
        Dim i As Integer
        Dim nPosition As Integer
        Dim ValNb As Integer
        Dim LesZeros As Integer
        Dim strResultat As String
        Dim strTemp As String
        Dim tmpBuff As String
       
        Unites = Split("zéro;un;deux;trois;quatre;cinq;six;sept;huit;neuf", ";")
        Dixaines = Split("dix;onze;douze;treize;quatorze;quinze;seize;dix-sept;dix-huit;dix-neuf", ";")
        LesDixaines = Split(";dix;vingt;trente;quarante;cinquante;soixante;soixante-dix;quatre-vingt;quatre-vingt-dix", ";")
        Milliers = Split(";mille;million;milliard", ";")
    
    
        On Error GoTo NbVersTexteError
       
        strTemp = CStr(Int(ValNum))
        ' Pluriel des millions
        If Len(strTemp) > 6 Then
            tmpBuff = Left(strTemp, Len(strTemp) - 6)
            tmpBuff = Right(tmpBuff, 3)
            If Val(tmpBuff) > 1 Then
                Milliers(2) = Milliers(2) & "s"
            End If
        End If
        ' Pluriel des milliards
        If Len(strTemp) > 9 Then
            tmpBuff = Left(strTemp, Len(strTemp) - 9)
            tmpBuff = Right(tmpBuff, 3)
            If Val(tmpBuff) > 1 Then
                Milliers(3) = Milliers(3) & "s"
            End If
        End If
        ' Élaboration de la chaîne
        If ValNum = 0 Or ValNum = 1 Then
            strResultat = Unites(ValNum)
        End If
        For i = Len(strTemp) To 1 Step -1
            ValNb = Val(Mid$(strTemp, i, 1))
            nPosition = (Len(strTemp) - i) + 1
            Select Case (nPosition Mod 3)
                Case 1
                    LesZeros = False
                    If i = 1 Then
                        If ValNb > 1 Or (ValNb = 1 And nPosition > 4) Then
                            tmpBuff = Unites(ValNb) & " "
                        Else
                            tmpBuff = ""
                        End If
                    ElseIf Mid$(strTemp, i - 1, 1) = "1" Then
                        tmpBuff = Dixaines(ValNb) & " "
                        i = i - 1
                    ElseIf Mid$(strTemp, i - 1, 1) = "9" Then
                        tmpBuff = LesDixaines(8) & " " & Dixaines(ValNb) & " "
                        i = i - 1
                    ElseIf Mid$(strTemp, i - 1, 1) = "7" Then
                        If ValNb = 1 Then
                            tmpBuff = LesDixaines(6) & " et " & Dixaines(ValNb) & " "
                        Else
                            tmpBuff = LesDixaines(6) & " " & Dixaines(ValNb) & " "
                        End If
                        i = i - 1
                    ElseIf ValNb > 0 Then
                        tmpBuff = Unites(ValNb) & " "
                    Else
                        LesZeros = True
                        If i > 1 Then
                            If Mid$(strTemp, i - 1, 1) <> "0" Then
                                LesZeros = False
                            End If
                        End If
                        If i > 2 Then
                            If Mid$(strTemp, i - 2, 1) <> "0" Then
                                LesZeros = False
                            End If
                        End If
                        tmpBuff = ""
                    End If
                    If LesZeros = False And nPosition > 1 Then
                        tmpBuff = tmpBuff & Milliers(nPosition / 3) & " "
                    End If
                    strResultat = tmpBuff & strResultat
                Case 2
                    If ValNb > 0 Then
                        If strResultat = "un " And ValNb <> 8 Then
                            strResultat = LesDixaines(ValNb) & " et " & strResultat
                        Else
                            strResultat = LesDixaines(ValNb) & " " & strResultat
                        End If
                    End If
                Case 0
                    If ValNb > 0 Then
                        If ValNb > 1 Then
                            strResultat = Unites(ValNb) & " cent " & strResultat
                        Else
                            strResultat = "cent " & strResultat
                        End If
                    End If
            End Select
        Next i
        strResultat = RTrim(strResultat)
        ' Pluriel des centaines
        If Len(strTemp) > 2 And Right(strTemp, 2) = "00" Then
            tmpBuff = Mid(strTemp, Len(strTemp) - 2, 1)
            If Val(tmpBuff) > 1 Then
                strResultat = strResultat & "s"
            End If
        End If
        
    EndNbVersTexte:
        NbVersTexte = strResultat
        Exit Function
    NbVersTexteError:
        strResultat = "Erreur de conversion !"
        Resume EndNbVersTexte
    End Function
    Utilisation :
    Code:
    fDte_Lettre([date_depot_sav])
    Cordialement.

    PS : Ne pas m'ajouter de coloration syntaxique.
    Motif ► Cette dernière n'existe pas dans Access (pour moi = 2003) De ce fait on est habitué à lire notre code sans "fioritures".
    Merci.
    Dernière édition par francishop; 31/10/2013 à 07h52

  3. #3
    Bonjour,

    L'intérêt du post précédent est de pouvoir formater selon ses besoins. Pour les belges écrire nonante et septante n'est pas négligeable.
    En usage courant la fonction format fait amplement l'affaire.
    Dans une requête il faut employer la syntaxe Française.
    (Ceci peut varier en requête selon le paramétrage de votre système, à vous d'adapter, mais en vba Toujours l'Anglaise.)
    Jour France== => d .......Anglais => J
    Mois => m => idem pour les deux
    Année France => a ........Anglais => y

    Exemple dans une requête :
    Simple:
    Code:
    Format(Maintenant();"dd/mm/yy")
    Affiche =>01/11/13

    Plus élaboré:
    Code:
    Format(Maintenant();"dddd dd mmmm yyyy")
    Affiche => vendredi 01 novembre 2013

    Cordialement.

    Pour puristes :
    Code:
     Format(Maintenant();"dd/mm/yy";2;2)
    Le premier 2 indique qu'on raisonne "à la Française" => Premier jour = 2 (vbMonday en vba)
    Le dernier argument toujours avec le même raisonnement détermine la première semaine.(vbFirstFourDays en Visual basic)

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Tags pour ce sujet

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!