Fonction NB.JOURS.OUVRES

  • Initiateur de la discussion Farid
  • Date de début
F

Farid

Guest
Bonjour à Tous,

Voilà mon souci :
la fonction NB.JOURS.OUVRES ne comptabilise pas les 'samedis' en tant que jour ouvré or moi, je trvaille les samedis :angry: ! Je sais j'ai pas de chance.

Est-il possible de modifier (ou adapter) cette fonction pour qu'elle prenne en compte les samedis ?

Merci de votre Aide et Bon Courage à Tous
Farid
 

fdarro

XLDnaute Nouveau
Salut Farid et le forum.

tu peux essayer ce code:
Function NbOuvrés&(D1, D2)
Dim Prem As Date, Der As Date, i As Date
If D1 = D2 Then
Prem = D1
If TYPEJOUR(Prem) = 0 Then NbOuvrés = 1
Exit Function
End If
Select Case D1 < D2
Case True: Prem = D1: Der = D2
Case False: Prem = D2: Der = D1
End Select
For i = Prem To Der
NbOuvrés = NbOuvrés + (TYPEJOUR(i) = 0) * -1
Next i
End Function


'Cette fonction renvoie 0 si le jour passé en paramètre est un jour de semaine,
'1 d'un dimanche et 2 s'il s'agit d'un jour férié.
'Valide jusqu'en 2099 et pour les jours fériés français
Function TYPEJOUR(D As Date)
'L. Longre
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long
Dim Toto As Long

A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then TYPEJOUR = 2
Exit Function
End If
T = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + T + (T > 48) _
+ 6 - ((A + A \\ 4 + T + (T > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 7 Then TYPEJOUR = 1
End Select
End Function

@+
 
J

JJ59

Guest
Bonjour Farid, Fdarro et le Forum

Voici une formule que j'ai trouvée sur le site Excelabo.
Elle permet de calculer le nombre de samedi entre 2 dates.

=ent((datefin-joursem(datefin-6)-datedebut+8)/7)

Bon aprés-midi
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Début de la période en A1,
fin en A2

Nb de jours sauf dimanches :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(A1&':'&A2)))>1)*1)

Nb de fériés en dehors des dimanches :
=SOMMEPROD(((JOURSEM(Fer)>1))*(Fer>=A1)*(Fer<=A2))

Les 2 ensemble :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(A1&':'&A2)))>1)*1)-SOMMEPROD(((JOURSEM(Fer)>1))*(Fer>=A1)*(Fer<=A2))

Fer est une plage du classeur contenant la date de tous les fériés.
 

benlecanard

XLDnaute Junior
Re : Fonction NB.JOURS.OUVRES

Bonjour
Après avoir beaucoup tatonné et malgré de nombreux posts sur le sujet, je ne parviens pas à résoudre mon problème :(
Pourriez-vous m'aider SVP?

Problème:
= calcul du DELAI (intervalle entre deux dates)
= jours à exclure sont les dimanches et des jours fériés (plage) (et non pas aussi les samedis)
(formules en anglais)

Je n'arrive pas à utiliser networkingdays car exclusion du samedi
L'utilisation de code ou d'une formule matricielle ne serait pas idéale.
J'aimerais arriver à bien comprendre et utiliser une fonction plus classique (sumproduct?)

Ci-joint fichier exemple
Merci d'avance!
 

Pièces jointes

  • Delai jours - Test formule.zip
    9.7 KB · Affichages: 60
Dernière édition:

benlecanard

XLDnaute Junior
Re : Fonction NB.JOURS.OUVRES

J'ai réussi à utiliser la formule de Monique ci-dessus finallement
et corrigé erreur dans mon fichier de base

Ca semble marcher et ai réussi à prendre en compte les différentes possibilites
par contre la formule n'est pas très belle ou optimisée
Code:
=IF(OR(A3="";B3="";B3<A3;A3>TODAY();B3>TODAY();A3<DATEVALUE("01/01/2008");B3<DATEVALUE("01/01/2008"));"N/A";IF(SUMPRODUCT((WEEKDAY(ROW(INDIRECT(A3&":"&B3)))>1)*1)-SUMPRODUCT(((WEEKDAY(Exclusions)>1))*(Exclusions>=A3)*(Exclusions<=B3))-1<0;0;SUMPRODUCT((WEEKDAY(ROW(INDIRECT(A3&":"&B3)))>1)*1)-SUMPRODUCT(((WEEKDAY(Exclusions)>1))*(Exclusions>=A3)*(Exclusions<=B3))-1))

Y aurait il moyen de faire quelque chose de mieux svp?
 

Pièces jointes

  • Delai jours - Test formule 2.zip
    9.9 KB · Affichages: 42

Claude38

XLDnaute Impliqué
Re : Fonction NB.JOURS.OUVRES

Bonjour,

En attendant qui arrive mieux, formule légèrement raccourcie; suppression de dateval et de la condition joursem dans sommeprod.

A tester
 

Pièces jointes

  • Delai jours - Test formule 3.zip
    9.9 KB · Affichages: 65

benlecanard

XLDnaute Junior
Re : Fonction NB.JOURS.OUVRES

Merci Claude38
ca marche et la fonction est un peu raccourcie : cool

Si je veux compter aussi les samedis, il suffit de modifier le critere sur weekday n'est ce pas? (mais a ce moment, autant utiliser la fonction networkingdays j 'imagine?)
 

Discussions similaires

Réponses
2
Affichages
278
Réponses
14
Affichages
781

Statistiques des forums

Discussions
312 398
Messages
2 088 067
Membres
103 711
dernier inscrit
amin Saadaoui