Page 1 sur 1

ACCESS 2000 Calcul jours ouvrés et fériés

Posté : 29 sept. 2005, 14:57:54
par davidlemp
Bonjour, je vais essayer d'être le plus clair possible, voila je suis en train de créer une base de données complète pour mon centre de formation. Mon problème se situe sur un état que j'ai appelé "Etat nominatif des entrées et sorties en cours de mois"

Imaginons un stagiaire arrive en le 06 septembre 2005 en formation partant en stage le 31 octobre 2005 il revient le 20 novembre 2005 puis repart le 28 novembre 2005 et revient en formation le 19 décembre 2005.

Tous les mois nous devons faire un rapport sur les actes de présence de nos stagiaires. (sachant que meme s' il sont malades nous les comptons présents)

Les premières conditions sont :
- Les calculs se font en heures du lundi au vendredi : jours ouvrés
- en formation nous ne comptons pas les jours fériés
ex : pour le mois de novembre le 11 est férié donc décomptés
- en entreprise les jours fériés seront comptés

ensuite les autres conditions sont :
1er cas : l'arrivée en formation : si la date de début conso = date d'entrée en formation alors [(Calcul du nombre de jours ouvrés qui se calcul avec date fin mois - date entrée en formation) - jours fériés] * 7 heures

2ème cas : mois entier en formation : si date de fin conso > date d'entrée en entreprise alors(calcul du nombre de jours ouvrés qui se calcul avec date fin conso - date début conso )-jours fériés)]*7

3ème cas : mois entier en entreprise : si date début conso = date début entér en entreprise et si date fin conso = date fin en entreprise alors [(calcul du nombre de jours ouvrés)]*7

4ème cas : 1/2 formation en date de début de mois et 1/2 en entreprise en fin de mois : si le mois conso = mois de la date d'entrée en entreprise alors[ (date entrée en entreprise - date de début de conso)- jours fériés *7 ] et [(date fin conso - date d'entrée en entreprise)*7]

5ème cas : 1/2 en entreprise en début de mois et 1/2 en formation en fin de mois

6ème cas : 1/2 en formation en début de mois, 1/2 en entreprise en milieu de mois et le reste en formation

7ème cas : 1/2 entreprise en début de mois, 1/2 en formation en milieu de mois et le reste en entreprise

voila c tout pour les conditions, enfin je l'espère, donc vous pouvez imaginer mon gros problème.

Avant de vous quitter et en espèrant qu'une personne pourra m'aider meme une formule pourrai me débloquer pour le reste, je vais vous expliquer comment cette base de données fonctionne pour cet état.

J ai créer un formulaire , a droite jai les formations désirés et a gauche le calendrier d'access pour déterminer la date de début de conso et la date de fin de conso

Si vous voulez plus de renseignements. je suis à vous car je n'arriverai jamais tout seul à résoudre ce problème

je vous remercie par avance et j'espère que quelqu'un va pouvoir prendre en compte ce défi.

Salutations

Configuration: Office 2000 - Access 2000 sous Windows XP SP2

Posté : 29 sept. 2005, 16:33:28
par nouv
slt,
tu peux donner des précisions sur la manière dont sont gérées tes données de départ :
genre :
période 1 centre : date debut /date fin
période 1 entreprise : date debut/date fin
période 2 centre : date debut /date fin
....
c'est dans une seule et même table, dans plusieurs tables...
en attendant je réflèchis

jours ouvrés et fériés

Posté : 30 sept. 2005, 07:36:05
par davidlemp
bonjour et merci de me consacrer de ton temps

Les périodes de stages sont aléatoires chaque année, c t d que nous avons 4 à 7 formations de 4 mois dans l'année et les dates de stages sont différentes tout le temps. J'espère que j ai été clair car c tres dur d'expliquer ce système.

Voici les différentes dates :

Table stagiaires : Date d'arrivée et date de sortie
Table informations formations :
- Date début de stage1 et date fin de stage1
- Date début de stage2 et date fin de stage2
- Date début de stage3 et date fin de stage3

J'ai créer aussi une table jours fériés avec tous les jours fériés du lundi au vendredi jusqu'en 2030

Pour la sélection des dates de conso je le fait directement sur le formulaire avec 2 etiquettes indépendantes mis a jour grace au calendrier pré intégré d'access 2000

Si tu veux que je t'envoie un bout de ma base de données pour mieux comprendre envoie moi un mail

merci encore
très cordialement

Posté : 30 sept. 2005, 09:09:36
par nouv
nouv,
slt,
quelques petites réflexions qui peuvent aidées

2 fonctions de calcul en VBA
******
Option Compare Database

Option Base 1



Function samdim(datedebut As Date, datefin As Date)

'calcul le nombre de samedi et de dimanche

'dÈclarations

Dim nbjoursamdim As Integer

Dim compteursamdim As Integer

Dim datesamdim As Date

Dim compeur2samdim As Integer

'nombre de jour entre les deux dates (sert ‡ incrÈmenter le compteur ci-aprËs)

nbjoursamdim = (datefin - datedebut)

'calcul de nombre de samedi(=6) et dimanche (=7)

For compteursamdim = 0 To nbjoursamdim

datesamdim = datedebut + compteursamdim

If Weekday(datesamdim, 2) >= 6 Then compteur2samdim = compteur2samdim + 1

Next

samdim = compteur2samdim

End Function



Function nbjourferie(datedebut As Date, datefin As Date)

'attention de ne pas mettre en jour fÈriÈ un samedi ou un dimanche

'dÈclarations

Dim compteurferie As Integer

Dim jourferies(1 To 7) As Date

Dim dateferie As Date

'dÈclarations des jours fÈriÈs A VERIFIER

jourferies(1) = DateSerial(2005, 3, 28)

jourferies(2) = DateSerial(2005, 5, 5)

jourferies(3) = DateSerial(2005, 7, 14)

jourferies(4) = DateSerial(2005, 8, 15)

jourferies(5) = DateSerial(2005, 11, 1)

jourferies(6) = DateSerial(2005, 11, 11)

jourferies(7) = DateSerial(2006, 4, 17)

'nombre de jour entre les deux dates(sert ‡ incrÈmenter le compteur ci aprËs)

nbjourferie = (datefin - datedebut)

'boucle 1 ajouter de 0 ‡ x jours dÈfinis par compteur ci-dessus

For compteurferie = 0 To nbjourferie

dateferie = datedebut + compteurferie

'boucle 2 verifie si dateferie est une date du tableau prÈdÈfini

For i = 1 To 7

If dateferie = jourferies(i) Then compteur2ferie = compteur2ferie + 1

Next

nbjourferie = compteur2ferie

Next

End Function

*****
ensuite entre la date debut formation(ou entreprise)et la date debut conso, celle qui t'interesse est toujours la plus GRANDE - donc possible d'utiliser la fonction MAX
entre la date fin formation(ou entreprise) et la date fin conso, celle qui t'interesse est toujours la plus PETITE - donc possible d'utiliser la fonction MIN
*****

pour la fonction jour férié je viens de voir que tu avais créé une table, je vais voir si je peux utiliser
si je n'arrive pas à trouver quelque chose je te demanderais ta base

Posté : 05 oct. 2005, 19:53:05
par nouv
slt,
je t'ai envoyé mon adresse en mp
><>

pas demessage en mp

Posté : 06 oct. 2005, 11:47:46
par davidlemp
desolé j ai rien recu

Posté : 06 oct. 2005, 16:53:15
par nouv
slt,
je te l'ai envoyé sur ton mail, les mp marchent pas !
><>

Posté : 11 oct. 2005, 09:44:59
par nouv
slt,
je t'ai envoyé la base avec les calculs. Sinon pour ceux que ça interesse

calculs du nombre de jour fériés entre deux dates - simple, rapide, pas cher
départ : une table "liste des jours fériés ouvrés" avec un champ "date férié" au format date heure
Attention la fonction passe les arguments date1 et date2 BYVAL (par valeur) parceque je l'utilise à l'interieur d'une autre. Pour l'utiliser seule BYVAL ne doit pas être nécéssaire.

Function jourfériéperiode(ByVal date1 As Date, ByVal date2 As Date)
'on commence par convertir les dates debut et fin au fomat américain pour
'utiliser dcount (sinon marche pas)

date1USA = Format(date1, "mm/dd/yyyy")
date2USA = Format(date2, "mm/dd/yyyy")
'on compte le nombre correspondant dans la table (à noter les # indiquant une valeur de date)
jourfériéperiode = DCount("[date férié]", "[Liste des jours fériés ouvrés]", "[date férié]" & " BETWEEN #" & date1USA & "# AND #" & date2USA & "#")
End Function