IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Fonction Date ADD + Année


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut Fonction Date ADD + Année
    Bonjour à tous amis développeurs,

    j'ai un piti problème en ce moment, je dois corriger une anomalie dans un
    programme, ma question est la suivante :
    mon programme permet de contrôler la validité d'une période, seulement il ne
    se base que sur le mois et utilise la fonction DateAdd (pour tester le mois),
    je voudrais qu'il teste également l'année parce que si je me trouve sur 2 mois
    de 2 années différentes (exemple Décembre 2007 et Janvier 2008), le
    programme ne comprend plus rien , comment puis ajouter la prise en compte
    de l'année dans mes conditions que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Public Function verif_date(fr As String, deb As Date, fin As Date, dm As Date)
    On Error GoTo err_verif_date
     
    'Fonction qui contrôle si la validité de la période d'un contrat
     
    'Paramètre:
    'fr : Fréquence de relève du contrat (2M, 6M, MM, JM, JJ)
    'deb : Date d'emgt
    'fin : Date de dmgt
    'dm : 1er jour du mois en cours
     
        verif_date = False
     
        If Left(fr, 2) = "jj" Then
            If deb < DateAdd("m", 1, dm) Then
                If fin >= dm Then
                    verif_date = True
                    Exit Function
                End If
            End If
        Else
            If deb < dm Then
                If fin >= DateAdd("m", -1, dm) Then
                    verif_date = True
                    Exit Function
                End If
            End If
        End If
     
        Exit Function
     
    err_verif_date:
        msgbox "VERIF_DATE : " & Err.Description
     
    End Function

    Merci d'avance pour votre réponse

    Lolo

  2. #2
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonjour,

    J'ai bien lu ton code mais... je ne comprends pas bien ce que tu veux faire avec cela.
    Qu'advient-il de "2M, 6M, MM, JM" qui ne sont pas pris en compte ?

    Merci de nous éclairer un peu sur le contexte dans lequel tu utilises ce code (par quoi est-il alimenté par exemple)

    Pour info, la fonction DateAdd prend en compte les années. Si tu ajoutes 3 mois à une date de l'an passé, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DateAdd("m", 3, "1/12/07")
    la réponse est bien 1/03/08

  3. #3
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Bonjour à toi énergéticien , ( eh oui t'es reconnu ==> çà sens la relève Gaz).
    Le code suivant simplifié devrait répondre correctement vrai ou Faux si pour chaque date que tu passes à la fonction, tu les transformes d'abord en date :
    si se sont des chaines ==> utilise la fonction cdate()
    Ton anomalie ressemble plus à un problème de format date, plutôt qu'a un problème d'année.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function verif_date(fr As String, deb As Date, fin As Date, dm As Date)
     
    'Fonction qui contrôle si la validité de la période d'un contrat
    'Paramètre:
    'fr : Fréquence de relève du contrat (2M, 6M, MM, JM, JJ)
    'deb : Date d'emgt
    'fin : Date de dmgt
    'dm : 1er jour du mois en cours
        On Error Resume Next
        If Left(fr, 2) = "jj" Then
            verif_date = (deb < DateAdd("m", 1, dm) And fin >= dm)
        Else
            verif_date = (deb < dm And fin >= DateAdd("m", -1, dm))
        End If    
    End Function
    Astuce : Un test peut être chargé dans une variable Booléene

    Encore plus compacte par un iif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function verif_date(fr As String, deb As Date, fin As Date, dm As Date)
     
    'Fonction qui contrôle si la validité de la période d'un contrat
    'Paramètre:
    'fr : Fréquence de relève du contrat (2M, 6M, MM, JM, JJ)
    'deb : Date d'emgt
    'fin : Date de dmgt
    'dm : 1er jour du mois en cours
        On Error Resume Next
        verif_date = IIf(Left(fr, 2) = "jj", (deb < DateAdd("m", 1, dm) And fin >= dm), (deb < dm And fin >= DateAdd("m", -1, dm)))
    End Function

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2010, 15h12
  2. Fonction date année, mois jour?
    Par Portekoi dans le forum DB2
    Réponses: 1
    Dernier message: 11/12/2007, 11h45
  3. Réponses: 4
    Dernier message: 29/03/2007, 15h11
  4. select en fonction de l'année d'une date
    Par maraly dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/03/2007, 08h51
  5. Réponses: 3
    Dernier message: 05/09/2006, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo