ACCESS 2000 Calcul jours ouvrés et fériés
Modérateur : Modérateurs
ACCESS 2000 Calcul jours ouvrés et fériés
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
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
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
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
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
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
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
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
pas demessage en mp
desolé j ai rien recu
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
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
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités