IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Champ calculé - jours ouvrés


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 5
    Points
    5
    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

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 116
    Points : 93
    Points
    93
    Par défaut
    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é

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    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
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Calcul jours ouvrés
    Par laeticiagooding dans le forum SAS Base
    Réponses: 2
    Dernier message: 19/02/2014, 22h08
  2. Calcul jours ouvrés période
    Par deniooo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/07/2008, 09h49
  3. Réponses: 4
    Dernier message: 02/05/2008, 19h13
  4. [Oracle] Calcul Jours Ouvrés
    Par Mimile28 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/10/2006, 15h31
  5. Réponses: 7
    Dernier message: 22/08/2006, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo