Conversion de dates

J’importe des données d’un autre système informatique, et mes dates sont au format 20080701 (pour le 01/07/2008). Comment les convertir en dates Access ?

La fonction de conversion

Recopiez la fonction VBA ci-dessous dans un module standard de votre base de données.

Utilliser la fonction

Dans une requête, vous utilisez la fonction dans un champ calculé, de la manière suivante :

Comme la fonction attend une chaîne de caractères, il faut éviter de lui passer des dates vides (Null). D’où l’appel préalable de la fonction Nz() pour convertir un Null éventuel en une date valide (telle qu’elle est attendue par la fonction VBA). Je pars du principe qu’en l’absence de valeur, la date par défaut sera 01/01/2000. Vous pouvez aménager selon vos besoins !

En VBA,  la fonction s’utilisera de cette manière :

Vous aimerez aussi...

2 réponses

  1. Focus3D dit :

    Salut,
    j’ai essayé de reprendre cette fonction pour faciliter la saisie de la date dans une textbox où 25092014 represente la date 25/09/2014:

    dans un formulaire ajouter deux textbox (txtDate et txtAutreTex)t pour tester la tabulation:
    Option Compare Database
    Option Explicit

    Private Sub txtDate_Exit(Cancel As Integer)
    If txtDate = vbNullString Then Exit Sub

    If TransformerEnDate(txtDate) Then
    txtDate = TransformerEnDate(txtDate)
    Else
    MsgBox « Non valid date »
    SelectionTexte Me.txtDate
    Cancel = True
    End If
    End Sub

    et la fonction utile:
    ‘—————————————————————————————
    ‘ Module : basTransformerEnDate
    ‘ Author : Hervé Inisan modified by Focus3D
    ‘ Date : 06/10/2014
    ‘ Purpose : Convert string numbers to Date for easy user input
    ‘—————————————————————————————

    Option Compare Database
    Option Explicit
    ‘ —
    ‘ SELECTION DU CONTENU ENTIER D’UNE ZONE DE TEXTE
    ‘ —

    Sub SelectionTexte(txt As Access.TextBox)
    txt.SelStart = 0
    txt.SelLength = Len(txt.Text)
    End Sub
    ‘ —
    ‘ Teste si année est bissextile
    ‘ —

    Public Function IsLeapYear(ByVal lngYear As Long) As Boolean
    IsLeapYear = ((lngYear Mod 4 = 0) And (lngYear Mod 100 0)) _
    Or (lngYear Mod 400 = 0)
    End Function
    ‘ —
    ‘ Transforme 25092014 en 25/09/2014
    ‘ —

    Function TransformerEnDate(ByVal strDateDepart As String) As Date

    Dim strJour As String
    Dim strMois As String
    Dim strAnnee As String

    If Len(strDateDepart) 8 Then
    Exit Function
    End If

    ‘ Extraire les 3 parties de la date
    strJour = Left(strDateDepart, 2)
    strMois = Mid(strDateDepart, 3, 2)
    strAnnee = Right(strDateDepart, 4)

    Select Case strMois
    Case « 01 », « 03 », « 05 », « 07 », « 08 », « 10 », « 12 »
    If strJour > « 31 » Then
    Exit Function
    End If
    Case « 04 », « 06 », « 09 », « 11 »
    If strJour > « 30 » Then
    Exit Function
    End If
    Case « 02 »
    If strJour > « 29 » Then
    Exit Function
    Else
    If (strJour = « 29 ») And (IsLeapYear(strAnnee) = False) Then
    Exit Function
    End If

    End If
    Case Else
    Exit Function
    End Select

    TransformerEnDate = DateSerial(strAnnee, strMois, strJour)

    End Function

    Merci encore pour cette mine d’infos.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *