Paramétrer la fonction SERIE.JOUR.OUVRE

Bonjour à tous,

Existe-il un paramétrage de la fonction SERIE.JOUR.OUVRE, pour qu'elle calcul les jours ouvrés selon le jour de début de la semaine comme c'est le cas pour la fonction WeekDay ?

Merci d'avance.

Bonsoir,

Regarde le lien :

Bonjour Raja,

D'après ce que j'ai lu, il n'y a de paramétrage possible.

Lundi reste le début de la semaine par défaut pour SERIE.JOUR.OUVRE.

Ne pourrait-on pas contourner cet inconvénient ?

Bonjour,

Code à adapter.

Cdlt.

Function PlusJOuvres(D, NbJours)
Dim Dt, i
Dim NbOr, Epacte As Integer
Dim PLune, LPaques, Arr(10) As Long

  Dt = CLng(D)
  Do
    Dt = Dt + 1
    'calcul du Lundi de Pâques
    NbOr = (An Mod 19) + 1
    Epacte = (11 * NbOr - (3 + Int(2 + Int(An / 100)) * 3 / 7)) Mod 30
    PLune = DateSerial(An, 4, 19) - ((Epacte + 6) Mod 30)
    If Epacte = 24 Then PLune = PLune - 1
    If Epacte = 25 And (An >= 1900 And An < 2200) Then PLune = PLune - 1
    LPaques = PLune - Weekday(PLune) + vbMonday + 7    'Lundi Paques

    'tableau des fériés
    Arr(0) = DateSerial(An, 1, 1)
    Arr(1) = LPaques
    Arr(2) = LPaques + 38  'Ascencion
    Arr(3) = LPaques + 49  'Pentecôte
    Arr(4) = DateSerial(An, 5, 1)
    Arr(5) = DateSerial(An, 5, 8)
    Arr(6) = DateSerial(An, 7, 14)
    Arr(7) = DateSerial(An, 8, 15)
    Arr(8) = DateSerial(An, 11, 1)
    Arr(9) = DateSerial(An, 11, 11)
    Arr(10) = DateSerial(An, 12, 25)

    'ajoute si ouvré
    If (IsError(Application.Match(Dt, Arr, 0))) = True And _
        (Weekday(Dt, vbMonday) < 6) = True Then
      i = i + 1
    End If
  Loop Until i = NbJours

  PlusJOuvres = Dt

End Function 'fs

Bonjour Jean-Eric,

J'ai essayé cette fonction, mais j'ai une erreur : #VALEUR!#

Voila une formule (je crois qu'elle est de Monique), qui calcule l'écart en jours ouvrés entre deux dates A2 (date de début) et B2 (Date de fin) avec Dimanche comme premier jour de la semaine :

=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(A2&":"&B2)))<6)*(ESTNA(EQUIV(LIGNE(INDIRECT(A2&":"&B2));Fériés;0)))*1)

Et une autre de Amadeus :

=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(A2&":"&B2)))<6)*(NB.SI(Fériés;LIGNE(INDIRECT(A2&":"&B2)))=0))

Mais comment écrire ces formules, si je voudrais faire l'inverse, quand j'ai une date de début et un écart en nombre de jours à ajouter, est trouvée la date de fin (Faire le travail de la fonction SERIE.JOUR.OUVRE.INTL avec Excel 2010 ?

Bonjour,

=PETITE.VALEUR(SI((JOURSEM(A1+LIGNE(1:50))={1.2.3.4.5})*(NB.SI(fériés;A1+LIGNE(1:50))=0);A1+LIGNE(1:50));B1)

En fonction du nombre de jours à ajouter figurant en B1 (date de départ en A1) il faudra peut-être modifier LIGNE(1:50) en LIGNE(1:100) ou plus.

Prévoir une marge de manœuvre en fonction du nombre de jours à ajouter, si la marge est trop faible , la formule renverra #VALEUR!

A+

Re,

Une petite modification, mais cette fonction était et est fonctionnelle.

Cdlt

Option Explicit
Public Function PlusJOuvres(D, NbJours)
Dim Dt, i
Dim An As Integer
Dim NbOr, Epacte As Integer
Dim PLune, LPaques, Arr(10) As Long

    Dt = CLng(D)

    Do
        Dt = Dt + 1
        'calcul du Lundi de Pâques
        NbOr = (An Mod 19) + 1
        Epacte = (11 * NbOr - (3 + Int(2 + Int(An / 100)) * 3 / 7)) Mod 30
        PLune = DateSerial(An, 4, 19) - ((Epacte + 6) Mod 30)
        If Epacte = 24 Then PLune = PLune - 1
        If Epacte = 25 And (An >= 1900 And An < 2200) Then PLune = PLune - 1
        LPaques = PLune - Weekday(PLune) + vbMonday + 7    'Lundi Paques

        'tableau des fériés
        Arr(0) = DateSerial(An, 1, 1)
        Arr(1) = LPaques
        Arr(2) = LPaques + 38  'Ascencion
        Arr(3) = LPaques + 49  'Pentecôte
        Arr(4) = DateSerial(An, 5, 1)
        Arr(5) = DateSerial(An, 5, 8)
        Arr(6) = DateSerial(An, 7, 14)
        Arr(7) = DateSerial(An, 8, 15)
        Arr(8) = DateSerial(An, 11, 1)
        Arr(9) = DateSerial(An, 11, 11)
        Arr(10) = DateSerial(An, 12, 25)

        'ajoute si ouvré
        If (IsError(Application.Match(Dt, Arr, 0))) = True And _
        (Weekday(Dt, vbMonday) < 6) = True Then
            i = i + 1
        End If
    Loop Until i = NbJours

    PlusJOuvres = Dt

End Function 'fs

Bonsoir OOoiste, Jean-Eric,

OOoiste :: En PJ un essai avec la formule qui me renvoie une erreur : #NOMBRE!

Jean-Eric :: J'ai essayé la fonction avec cet exemple :

jeu 05/09/2013 - 5 - jeu 12/09/2013

Normalement, j'aurais eu le 11/09/2013 comme date de fin et non pas le 12/09/2013.

apt a écrit :

OOoiste :: En PJ un essai avec la formule qui me renvoie une erreur : #NOMBRE!

Il s'agit d'une formule matricielle qui doit être par conséquent validée par Ctrl+Maj+Entrée.

apt a écrit :

Jean-Eric :: J'ai essayé la fonction avec cet exemple :

jeu 05/09/2013 - 5 - jeu 12/09/2013

Normalement, j'aurais eu le 11/09/2013 comme date de fin et non pas le 12/09/2013.

Non. le résultat correct est bien le 12/09.

Date départ : jeu 05/09/2013

+1 dim 08/09 (on saute le vendredi et le samedi)

+2 lun 09/09

+3 mar 10/09

+4 mer 11/09

+5 jeu 12/09

Ta formule SOMMEPROD(...) compte le jour de départ.

A+

Comme les dates représentent des jours de repos.

Alors si un agent a pris un jour de repos qui débute le 05/09/2013, il sera apuré le même jour et prendra fin le 05/09/2013.

Dans ce cas remplacer toutes les occurrences de A1+LIGNE(1:50) par A1+LIGNE(1:50)-1 dans la formule.

A+

Bonjour OOoiste,

Merci pour l'astuce.

J'ai adapté la fonction de Jean-Eric (PlusJouvres) et j'ai créé une autre à partie de même de code (NBJouvres).

Un exemple en PJ.

Bonjour,

Une petite rectification.

Bonjour,

Parfois, la fonction PlusJOuvres tourne en rond.

Ca c'est passé avec moi lorsque la variable NbJours=1, alors j'ai réécris la fonction en changeant la condition dans la boucle :

Do

..

i=i+1

Loop Until i = NbJours - 1

en

Do Until i = NbJours - 1
...

i=i+1

Loop

Voila !

Rechercher des sujets similaires à "parametrer fonction serie jour ouvre"