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

Access Discussion :

Cumul des jours ouvrables d'après une fonction


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut Cumul des jours ouvrables d'après une fonction
    Bonjour,
    Dans un état j'ai la fonction si dessous qui recherche les jours fériés. Si le jour est un jour ouvrable il renvoie dans un contrôle la valeur 0 le jour est férié, la valeur 7 pour le vendredi et 8 pour les autres jours de la semaine en dehors du week-end
    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
    Private Function HeuLégal() 
    'Dim dhDate As Date 
    Dim Résultat As Integer 
    Dim dhLégal As Integer 
     
            dhDate = Me.[Date] 
            intAn = year(dhDate) 
    ' jours ouvrables 
    'Test pour savoir si le jour courant est ouvrable (lundi au vendredi) 
       If Weekday(dhDate) <> 1 And Weekday(dhDate) <> 7 Then 
    'Test des jours fériés avec dates invariables 
          Select Case dhDate 
             Case CDate("01/01/" & intAn) 'Jour de l'an 
             Case CDate("01/05/" & intAn) 'Fête du travail 
             Case CDate("08/05/" & intAn) 'Anniv 1945 
             Case CDate("14/07/" & intAn) 'Fête nationale 
             Case CDate("15/08/" & intAn) 'Assomption 
             Case CDate("01/11/" & intAn) 'Toussaint 
             Case CDate("11/11/" & intAn) 'Anniv 1918 
             Case CDate("25/12/" & intAn) 'Noël 
             'Case CDate("26/12/" & intAn) 'St-Etienne 
             Case Else 
    'Test pour savoir si la date courante n'est pas un jour férié mobile 
                If JourFériéMobile(dhDate) = False Then 
    ' Totalise les jours ouvrables 
                   Résultat = Résultat + 1 
                End If 
          End Select 
       End If 
    NbreJoursouvrables = Résultat 
    'Atribu la durée en heures pour les jour à 8h 
    If NbreJoursouvrables = 1 And Weekday(dhDate) <> 6 Then 
    dhLégal = 8 
    'Le vendredi 7h 
    Else 
    dhLégal = 7 
    'Attribu 0 h si le jour n'est pas ouvrable 
    If NbreJoursouvrables <> 1 Then 
    dhLégal = 0 
    End If 
    End If 
     
     
    HeuLégal = dhLégal 
     
    End Function
    Comment peut-on calculer la somme hebdomadaire de dhLégal? Normalement 39 si il n'y a pas de jour férié
    Merci

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    ça me dit quelque chose ce message... :
    http://www.developpez.net/forums/vie...light=#2640230
    Y a pas une lettre qui a bougée

    Si personne ne t'as répondu la première fois c'est pas forcément parce qu'on t'aime pas...
    Mais peut-être que la question est mal posée (j'ai personnellement relu 2 fois et j'ai abandonné...)

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    on pourrait procéder ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function hs(debsem as date) as integer
    'debsem est le premier jour de la semaine
    dim courant as long
    dim cum as integer
    for courant=0 to 4
    cum=cum+(heulégal(debsem+courant
    next courant
    hs=cum
    par ailleurs ta fonction heulégal mériterait d'être modifié pour être plus générale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Function HeuLégal(dhdate as date) as date 
    Dim Résultat As Integer 
    Dim dhLégal As Integer 
     
                   intAn = year(dhDate)
    tu pourrais l'utiliser ainsi heulégal(Me.[Date])

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    Désolé Arkham46, à l'avenir je prendrais garde à être plus claire.
    Random je viens d’essayer la fonction, cela ne fonctionne pas. De plus je ne la comprends pas très bien.
    Merci pour quelques explications sur la fonction.
    A+

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    après re-relecture je commence à comprendre...
    c'est l'histoire du contrôle qui m'a déstabilisé alors qu'il n'y a aucun rapport...

    il te suffit d'exécuter le code de random en passant en paramètre le 1er jour de la semaine
    Pour avoir le premier jour de la semaine en fonction d'une date quelconque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaDate-weekday(TaDate,vbMonday)+1
    Le code cumule les heures des 5 cinq premiers jours de la semaine

    Pour le reste la fonction devrait plutôt être définie pour renvoyer un entier.
    Etant donné que tu sais ce que la fonction renvoie autant lui dire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Function HeuLégal(dhdate as date) as integer

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Bonjour, Arkham46
    Après différents essais le résultat de la fonction affiche toujours #Nom?
    Je suis perdus de plus je ne maitrise pas for /next.
    Merci pour l'aide

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par molene34
    Bonjour, Arkham46
    Après différents essais le résultat de la fonction affiche toujours #Nom?
    Je suis perdus de plus je ne maitrise pas for /next.
    Merci pour l'aide
    vérifie la portée de ta fonction, il faut peut-être la définir en Public

    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cum=cum+(heulégal(debsem+courant
    il manque juste les parenthèses fermantes non?

    pour le For..Next c'est bien expliqué dans l'aide
    c'est juste une boucle avec un compteur

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Bonjour, Arkham46
    J'ai portée la définition de la fonction à Public et toujours #Nom?
    Pour les parenthèses je les est bien fermées.
    Je ne sais pas ou mettre le code qui définit le 1er jour de la semaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaDate-weekday(TaDate,vbMonday)+1
    Je poursuis mes recherches pour une meilleur compréhention de for/next.
    Merci pour l'aide

  9. #9
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    la fonction HeuLégal doit être définie avec un paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Function HeuLégal(dhdate as date) as integer
    et la fonction hs devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function hs(debsem As Date) As Integer
    'debsem est le premier jour de la semaine
    Dim courant As Long
    Dim cum As Integer
    debsem = debsem - Weekday(debsem, vbMonday) + 1
    For courant = 0 To 4
    cum = cum + (HeuLégal(debsem + courant))
    Next courant
    hs = cum
    End Function

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Bonsoir Arkham46,
    Est ce un élément important que ma fonction se passe dans un état et non pas dans un module?
    A+

  11. #11
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    si l'appel à la fonction est dans un contrôle de l'état alors ça va chercher la fonction également dans le module de classe de l'état

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    J'ai essayé la fonction et j'ai toujours #Nom?
    Je ne vais pas insister, je vais d’abords essayer de bien comprendre l'utilisation de for/next et de voir d'autres exemples sur le net.
    Merci beaucoup pour l'aide
    A+

Discussions similaires

  1. [XL-2007] Ajouter des jours ouvrables à une date
    Par louqui dans le forum Excel
    Réponses: 12
    Dernier message: 08/03/2012, 14h42
  2. Gestion des lignes vides avant/après une liste
    Par 84mickael dans le forum Mise en forme
    Réponses: 4
    Dernier message: 28/08/2007, 16h25
  3. Réponses: 4
    Dernier message: 14/03/2007, 09h25
  4. [C#] Passer des contrôles comme parametre dans une fonction
    Par sara21 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/09/2006, 13h05
  5. Somme des champs ? existe t il une fonction ...
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/01/2006, 11h57

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