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

Access Discussion :

Calcul date de fin à partir d'une date et un nombre de jour


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Calcul date de fin à partir d'une date et un nombre de jour
    Bonjour,

    Dans un formulaire je voudrai calculer une date de fin à partir d'un champs date et d'un nombre de jour en prenant en compte seulement les jours ouvrés ?? Auriez-vous la formule pour cela ?

    Merci à tous pour l'aide

    Stéfen

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Bonjour,

    Il faut voir avec la fonction DateAdd.

    Cdlt
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Trouvé dans le Help de MS Access :
    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
    36
    37
    38
    39
    40
    Function Work_Days(BegDate As Variant, EndDate As Variant) As Integer
     
       Dim WholeWeeks As Variant
       Dim DateCnt As Variant
       Dim EndDays As Integer
     
       On Error GoTo Err_Work_Days
     
       BegDate = DateValue(BegDate)
       EndDate = DateValue(EndDate)
       WholeWeeks = DateDiff("w", BegDate, EndDate)
       DateCnt = DateAdd("ww", WholeWeeks, BegDate)
       EndDays = 0
     
       Do While DateCnt <= EndDate
          If Format(DateCnt, "ddd") <> "Sun" And _
            Format(DateCnt, "ddd") <> "Sat" Then
             EndDays = EndDays + 1
          End If
          DateCnt = DateAdd("d", 1, DateCnt)
       Loop
     
       Work_Days = WholeWeeks * 5 + EndDays
     
    Exit Function
     
    Err_Work_Days:
     
        ' If either BegDate or EndDate is Null, return a zero
        ' to indicate that no workdays passed between the two dates.
     
        If Err.Number = 94 Then
                    Work_Days = 0
        Exit Function
        Else
    ' If some other error occurs, provide a message.
        MsgBox "Error " & Err.Number & ": " & Err.Description
        End If
     
    End Function
    Ceci tient compte des week-ends mais pas des jours fériés légaux.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Une petite participation :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    Function Work_Days(BegDate As Variant, EndDate As Variant) As Integer
     
       Dim WholeWeeks As Variant
       Dim DateCnt As Variant
       Dim EndDays As Integer
     
       On Error GoTo Err_Work_Days
     
       BegDate = DateValue(BegDate)
       EndDate = DateValue(EndDate)
       WholeWeeks = DateDiff("w", BegDate, EndDate)
       DateCnt = DateAdd("ww", WholeWeeks, BegDate)
       EndDays = 0
     
       Do While DateCnt <= EndDate
          if Not IsFerie(DateCnt) then and WeekDay(DateCnt, vbMonday) <> 6 and WeekDay(DateCnt, vbMonday) <> 7 then
             EndDays = EndDays + 1
          End If
          DateCnt = DateAdd("d", 1, DateCnt)
       Loop
     
       Work_Days = WholeWeeks * 5 + EndDays
     
    Exit Function
     
    Err_Work_Days:
     
        ' If either BegDate or EndDate is Null, return a zero
        ' to indicate that no workdays passed between the two dates.
     
        If Err.Number = 94 Then
                    Work_Days = 0
        Exit Function
        Else
    ' If some other error occurs, provide a message.
        MsgBox "Error " & Err.Number & ": " & Err.Description
        End If
     
    End Function
     
     
     
    Function IsFerie(LeJour)
     Annee = Year(LeJour)
     Paques = fPaques(Annee) 'Cherche le jour de Pâques
     
     LunPaq = cStr(DateAdd("d", 1, Paques)) 'En déduit les jours fériés mobiles
     
     Ascension = cStr(DateAdd("d", 39, Paques))
     
     LunPent = cStr(DateAdd("d", 50, Paques))
     
     PremierJanvier = "01/01/" & Annee
     PremierMai = "01/05/" & Annee
     HuitMai = "08/05/" & Annee
     QuatorzeJuillet = "14/07/" & Annee
     QuinzeAout = "15/08/" & Annee
     PremierNovembre = "01/11/" & Annee
     OnzeNovembre = "11/11/" & Annee
     Noel = "25/12/" & Annee
     
     StrJour = cStr(LeJour)
     if StrJour = LunPaq or StrJour = Ascension or (StrJour = LunPent and Year(LunPent) < 2005) or (StrJour = LunPent and Year(LunPent) > 2007) _
     or StrJour = PremierJanvier or StrJour = PremierMai or StrJour = HuitMai _
     or StrJour = QuatorzeJuillet or StrJour = QuinzeAout or StrJour = OnzeNovembre _
     or StrJour = PremierNovembre or StrJour = Noel then
      IsFerie = true
     else
      IsFerie = false
     end if
    End Function
     
     
     
    Function fPaques(An)
    	'Calcule le jour de Pâques en fonction de l'année
     
    	a  = An  Mod 19
    	b  = An  \ 100
    	c  = An  Mod 100
    	d  = b  \ 4
    	e  = b  Mod 4
    	f  = (b  + 8) \ 25
    	g  = (b  - f  + 1) \ 3
    	h  = (19 * a  + b  - d  - g  + 15) Mod 30
    	i  = c  \ 4
    	k  = c  Mod 4
    	l  = (32 + 2 * e  + 2 * i  - h  - k ) Mod 7
    	m  = (a  + 11 * h  + 22 * l ) \ 451
    	n  = (h  + l  - 7 * m  + 114) \ 31
    	p  = (h  + l  - 7 * m  + 114) Mod 31
    	fPaques = DateSerial(An , n , p  + 1)
    End Function

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2010, 07h39
  2. Réponses: 8
    Dernier message: 18/03/2010, 08h57
  3. Réponses: 11
    Dernier message: 05/12/2008, 16h10
  4. Réponses: 4
    Dernier message: 07/08/2008, 17h12
  5. [Débutant] Calcul d'une date à partir d'une date de départ et d'une durée
    Par Marmotton76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2007, 10h39

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