Fonction pour compter heures jour/nuit semaine, férié et dimanche

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais votre aide afin d'écrire les fonctions pour un planning..
voir fichier joint, c'est plus simple car explications compliquées...

Je vous remercie pour le temps que vous voudrez bien m'accorder.

Bien à vous,
Christian.
 

Pièces jointes

  • PlanningPlusieursHorairesUneColonne.zip
    13.7 KB · Affichages: 109

lucmohamed

XLDnaute Nouveau
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonsoir,

j'ai arrivé à faire que Vendredi soit le jour férié au lieu et place Dimanche. Voici les modification que j'ai fait

code:
Function Tot1#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat) = 0 And Weekday(dat) <> 6
test2 = Application.CountIf([Férié], dat + 1) = 0 And Weekday(dat + 1) <> 6
Calcul "Jour", test1, test2, horaire, temp
Tot1 = temp
End Function

Function Tot2#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat) = 0 And Weekday(dat) <> 6
test2 = Application.CountIf([Férié], dat + 1) = 0 And Weekday(dat + 1) <> 6
Calcul "Nuit", test1, test2, horaire, temp
Tot2 = temp
End Function

Function Tot3#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat)
test2 = Application.CountIf([Férié], dat + 1)
Calcul "Jour", test1, test2, horaire, temp
Tot3 = temp
End Function

Function Tot4#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat)
test2 = Application.CountIf([Férié], dat + 1)
Calcul "Nuit", test1, test2, horaire, temp
Tot4 = temp
End Function

Function Tot5#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat) = 0 And Weekday(dat) = 6
test2 = Application.CountIf([Férié], dat + 1) = 0 And Weekday(dat + 1) = 6
Calcul "Jour", test1, test2, horaire, temp
Tot5 = temp
End Function

Function Tot6#(dat#, horaire$)
Dim test1 As Boolean, test2 As Boolean, temp#
test1 = Application.CountIf([Férié], dat) = 0 And Weekday(dat) = 6
test2 = Application.CountIf([Férié], dat + 1) = 0 And Weekday(dat + 1) = 6
Calcul "Nuit", test1, test2, horaire, temp
Tot6 = temp
End Function
 

job75

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour Christian, le fil, le forum,

Une substantielle amélioration dans cette version (5) :

Code:
Sub Calcul(test1 As Boolean, test2 As Boolean, horaire$, a)
If test1 + test2 = 0 Then Exit Sub
Dim deb#, fin1#, fin#, s, i%, s1, h1#, h2#, jour#, nuit#
deb = [DN]: fin1 = [FN]: fin = fin1 + 1
horaire = Replace(Replace(UCase(horaire), "H", ":"), "24:", "0:")
s = Split(horaire)
For i = 0 To UBound(s)
  s1 = Split(s(i), "-")
  If UBound(s1) = 1 Then
    h1 = CDate(s1(0))
    If h1 < h2 Then h1 = h1 + 1
    h2 = CDate(s1(1))
    If h2 <= h1 Then h2 = h2 + 1 'ou h2 < h1...
    If test1 Then '1er jour
      jour = jour - IIf(h2 > fin1, fin1, h2) + IIf(h1 > fin1, fin1, h1)
      jour = jour + IIf(h2 > deb, deb, h2) - IIf(h1 > deb, deb, h1)
      nuit = nuit + IIf(h2 > fin1, fin1, h2) - IIf(h1 > fin1, fin1, h1)
      If h1 < 1 And h2 > deb Then _
        nuit = nuit + IIf(h2 > 1, 1, h2) - IIf(h1 > deb, h1, deb)
    End If
    If test2 Then '2ème jour
      jour = jour + IIf(h2 > fin, h2, fin) - IIf(h1 > fin, h1, fin)
      If h1 < fin And h2 > 1 Then _
        nuit = nuit + IIf(h2 > fin, fin, h2) - IIf(h1 > 1, h1, 1)
    End If
  End If
Next
a(0) = jour: a(1) = nuit 'heures renvoyées
End Sub
Les heures sont renvoyées dans un tableau (a) de 2 éléments.

De ce fait le nombre de fonctions est divisé par 2, ce sont des vecteurs lignes.

Pour entrer les formules il faut d'abord sélectionner les cellules par paires : C5: D5, E5:F5, G5:H5.

Et valider la formule matriciellement par Ctrl+Maj+Entrée.

Nota 1 : la durée d'exécution est elle aussi divisée par 2.

Nota 2 : les heures pouvant dépasser 24:00, la plage C5:H35 est au format [h]:mm.

Bonne journée et A+
 

Pièces jointes

  • PlanningPlusieursHorairesUneColonne(5).xls
    82.5 KB · Affichages: 81
  • PlanningPlusieursHorairesUneColonne(5).xls
    82.5 KB · Affichages: 70
  • PlanningPlusieursHorairesUneColonne(5).xls
    82.5 KB · Affichages: 78

job75

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Re,

Je pense qu'avec la version (5) on a fait le tour de la question.

Cependant, si vous testez bien, vous remarquerez que la dernière plage de nuit du 2ème jour (21:00-24:00) se comptabilise en heures de jour.

On pourrait y remédier mais cela alourdirait inutilement le calcul car normalement ces heures-là doivent apparaître dans l'horaire du jour suivant.

A+
 

job75

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Re,

Bon, si l'on tient à traiter correctement la plage 21:00-24:00 du 2ème jour, voir ce fichier (5 bis).

A+
 

Pièces jointes

  • PlanningPlusieursHorairesUneColonne(5 bis).xls
    83.5 KB · Affichages: 70
Dernière édition:

lucmohamed

XLDnaute Nouveau
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour CHALET53,

je n'ai pas bien compris ce que vous vouliez dire de "Il suffit de gérer les jours fériés sur 2 exercices (et modifier la plage fériés pour intégrer A+1) : je l'ai testé"

Pourriez vous expliquez plus en détail??

Merci.
 

lucmohamed

XLDnaute Nouveau
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour,

J'interviens uniquement pour saluer le travail remarquable de JOB75
Si je peux me permettre une remarque : il y a un cas de figure qui ne fonctionne pas, c'est le 31/12 si l'activité se prolonge sur le 01/01 de l'année suivante (jour férié)

Il suffit de gérer les jours fériés sur 2 exercices (et modifier la plage fériés pour intégrer A+1) : je l'ai testé

a+

Bonjour CHALET53,

je n'ai pas bien compris ce que vous vouliez dire de "Il suffit de gérer les jours fériés sur 2 exercices (et modifier la plage fériés pour intégrer A+1) : je l'ai testé"

Pourriez vous expliquez plus en détail??

Merci.
 

CHALET53

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour,

Je croyais que la dernière version de Job75 traitait le problème (a priori non)
Le 31/12/2014 tombe un Mercredi
Une plage horaire saisie à cette date : 08H00-07H00 (se termine le 01/01/2015 : jour férié). La fonction de Job75 renvoie les 23 heures sur le 31/12/2014 en jours ouvrables. On devrait avoir : jour ouvrable (13 et 3) et en jour férié (1 et 6)
En modifiant la feuille Config pour mettre la plage Férié sur 2 exercices (An et An+1), et en redéfinissant la plage jusqu'en A28, le problème est réglé
 

job75

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Hello CHALET53,

Je croyais que la dernière version de Job75 traitait le problème (a priori non)

Mais les jours fériés ne sont pas du tout un problème.

Ce n'est qu'une liste de dates... S'il en manque, eh bien pas de jour férié, c'est aussi simple que ça :cool:

Et au besoin faire une liste des jours fériés sur 10 ans ou plus, point barre.

A+
 

CHALET53

XLDnaute Barbatruc
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour Job75

Avec toutes mes excuses : je sens une pointe d'agacement dans tes propos
C'est vrai que je ne suis qu'un petit sur ce forum : aussi, je m'éclipse de cette discussion sur la pointe des pieds

A+
 

lucmohamed

XLDnaute Nouveau
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Bonjour,

job75 a tout expliqué. merci bcp.

Une petite question. Désolé pour notre tete dure.

Dans le cas du mercredi 31 décembre 2014, un travail a été fait de 14h00-03h00. Il calcul que la partie non ferié. Il ne mets pas dans la colonne jour ferié le 03h ferié.

Si je suis en train de passer à coté de quelque chose, excusez moi. Je suis pas un expert.
 

Christian0258

XLDnaute Accro
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Re, le forum, lucmohamed,
Bonjour à tous,

lucmohamed, il faut redéclarer, dans nom définir, la zone "Férié" jusqu'en A16 valider puis mettre cette formule :
=DATE(An+1;1;1) en A16 feuille "Config".

Bien amicalement,
Christian
 

Christian0258

XLDnaute Accro
Re : Fonction pour compter heures jour/nuit semaine, férié et dimanche

Re, le forum, Job75,

Je reviens sur ce beau travail effectué par Job75...

J'ai une tite question ; si je choisit l'option Calendrier1904, il me semble que les fonctions ne renvoient pas les bons calculs ???.

Bien à vous,
Christian
 

Discussions similaires

Statistiques des forums

Discussions
312 325
Messages
2 087 307
Membres
103 513
dernier inscrit
adel.01.01.80.19