Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/05/2011, 18h20   #1
Invité de passage
 
Inscription : avril 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 8
Points : 0
Points : 0
Par défaut Champ calculé - jours ouvrés

bonjour à tous
j'ai un probleme avec une formule dans un champ calculé
champ 1 (date debut)
champ 2 (durée) = nombre heure prévue/7 H travaillée / nombre stagiaire
je voudrais compter que les jours travaillés soit lundi mardi mercredi jeudi ça ressemble un peu à excel (jour ouvré)
champ 3 (fin prévue) actuellement la formule est "date début +durée"
une formule avec les jours travaillées serait de fait beaucoup plus précise mais je ne m'en sort pas
cordialement
zenzila14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h07   #2
Membre du Club
 
Homme Jérémy B-ACD-AD- IJ
Étudiant
Inscription : avril 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Jérémy B-ACD-AD- IJ
Âge : 21
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 106
Points : 52
Points : 52
Bonjour,

Quel sont tes contraintes au niveau de la date de début? Aucune, ça peut être n'importe quel jour ou alors, il n'y a que des lundi?

Sinon la logique est simple, tu compte ton nombre de semaines. Tu m'ultiplie ce résultat par 4 (lundi, mardi, mercredi et jeudi).

Ensuite si tu n'a pas de contraintes sur le premier jour, il te faut déterminer si c'est un lundi, ou mardi etc... et de soustraire à ton résultat le nombre de jours que tu louppe cette semaine (ex: si c'est mardi, tu fait -1 car tu n'a pas le lundi).

J'espere t'avoir aidé
pikameuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h43   #3
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
salut,

la donne deja un tres bon exemple de fonction pour les tous les jours ouvres :

http://access.developpez.com/faq/?pa...nip#NbJourOuvr

en adaptant ce code et en prenant en compte les vendredi, la solution n'est pas loin

Toujours penser a jeter un oeil dans la
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/05/2011, 12h39   #4
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

L'exemple en FAQ te permet de tenir compte des jours fériés. Le pb que j'ai déjà rencontré c'est que :
  • les jours de fermeture des entreprises ne correspondent pas
  • l'horaire peut varier dans la semaine

La solution est de pouvoir définir jour par jour l'horaire de la semaine et de travailler avec un calendrier des jours ouvrés de l'entreprise. Ce deuxième point n'est pas très complexe mais nécessite de prévoir une saisie particulière.

Voici un code qui ne tient pas compte des fermetures, mais d'un horaire pour chaque jour de la semaine. Cela peut aussi te donner des idées...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Function fDateAddJoursOuvres(ByVal dteDeb As Date, ByVal sngNbHeures As Single) As Date
Dim sngSem As Single, dteRes As Date, nbSem As Integer, colDur As VBA.Collection, v As Variant
Const sngLun As Single = 7
Const sngMar As Single = 7
Const sngMer As Single = 7
Const sngJeu As Single = 7
Const sngVen As Single = 0
Const sngSam As Single = 0
Const sngDim As Single = 0
 
Set colDur = New VBA.Collection
colDur.Add sngLun, CStr(vbMonday)
colDur.Add sngMar, CStr(vbTuesday)
colDur.Add sngMer, CStr(vbWednesday)
colDur.Add sngJeu, CStr(vbThursday)
colDur.Add sngVen, CStr(vbFriday)
colDur.Add sngSam, CStr(vbSaturday)
colDur.Add sngDim, CStr(vbSunday)
 
'durée de la semaine
For Each v In colDur
    sngSem = sngSem + v
Next v
 
'initialisation
dteRes = dteDeb
sngNbHeures = sngNbHeures - colDur(CStr(Weekday(dteRes)))
nbSem = CInt(sngNbHeures \ sngSem)
 
'placer le nb entier de semaines
If nbSem > 0 Then
    'date 1
    dteRes = dteRes + nbSem * 7
    'heures résiduelles
    sngNbHeures = sngNbHeures Mod (nbSem * sngSem)
End If
 
'placer les heures résiduelles
While sngNbHeures > 0
    dteRes = dteRes + 1
    sngNbHeures = sngNbHeures - colDur(CStr(Weekday(dteRes)))
Wend
 
fDateAddJoursOuvres = dteRes
Set colDur = Nothing
 
End Function
Ce sont les valeurs donnes aux constantes qui déterminent l'horaire de la semaine.

COrdialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h56.


 
 
 
 
Partenaires

Hébergement Web