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 :

Calcul de date de livraison [AC-2013]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Calcul de date de livraison
    Bonjour,

    Je débute en VBA et je m'excuse à l'avance si ma demande vous paraît puérile.

    cherche à calculer la chose suivante :
    A partir d’une date de référence (départ du camion)
    J’ai un délai de livraison à plus 1,2 ou 3 jours
    J’aimerai calculer la date de livraison théorique en sautant les jours fériés et les weekends.

    Quelqu’un a une idée de code pour me donner un coup de pouce ?

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    C'est pas si simple et ça dépend du pays, du métier...
    Une 1e solution est de tenir un calendrier des jours travaillés et d'avancer de n jours dans ce calendrier. C'est un peu lourd mais ça permet de gérer les fermetures, ponts, fériés...

    Une autre solution est d'avoir une fonction qui détermine si un jour est travaillé ou pas, par exemple pour une société française qui ne travaille pas le 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
    Public Function ferie(ByVal d As Date) As Boolean '14.5 simplifié et étendu ->2030
    If Not Mode_debug Then On Error GoTo err
    Dim jour As Integer, res As Boolean
    100 jour = 100 * Month(d) + Day(d)
    102 If (jour = 101 Or jour = 501 Or jour = 508 Or jour = 714 Or jour = 815 Or jour = 1101 Or jour = 1111 Or jour = 1225) Then
    104   res = True 'feriés à date fixe
    106 Elseif Weekday(d) = 1 Or Weekday(d) = 7 then
    108   res=true 'week-end
        else 
    110   Select Case Year(d)
          Case 2009: res = (jour = 413 Or jour = 521) 'lundi Paques et ascension 2009
          Case 2010: res = (jour = 405 Or jour = 513)
          Case 2011: res = (jour = 425 Or jour = 602)
          Case 2012: res = (jour = 409 Or jour = 517)
          Case 2013: res = (jour = 401 Or jour = 509)
          Case 2014: res = (jour = 421 Or jour = 529)
          Case 2015: res = (jour = 406 Or jour = 514)
          Case 2016: res = (jour = 328 Or jour = 505)
          Case 2017: res = (jour = 417 Or jour = 525)
          Case 2018: res = (jour = 402 Or jour = 510)
          Case 2019: res = (jour = 422 Or jour = 530)
          Case 2020: res = (jour = 413 Or jour = 521)
          Case 2021: res = (jour = 405 Or jour = 513)
          Case 2022: res = (jour = 418 Or jour = 526)
          Case 2023: res = (jour = 410 Or jour = 518)
          Case 2024: res = (jour = 401 Or jour = 509)
          Case 2025: res = (jour = 421 Or jour = 529)
          Case 2026: res = (jour = 406 Or jour = 514)
          Case 2027: res = (jour = 329 Or jour = 506)
          Case 2028: res = (jour = 417 Or jour = 525)
          Case 2029: res = (jour = 402 Or jour = 510)
          Case 2030: res = (jour = 422 Or jour = 530)
          Case Else: res = False 'par défaut
          End Select
        End If
        ferie = res
        Exit Function
    err: Call message("Erreur " & err.Number & "/" & Erl & " dans api_rh.ferie : " & err.description)
    End Function
    Ensuite pareil on ajoute n jours non fériés à la date de départ
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Merci d'avoir répondu aussi rapidement !

    Pour le moment, j'avais simplement créé une table avec la liste des jours fériés et des weekends (jusqu'en 2015) que je pensais utiliser telle qu'elle. Mais ta solution est bien plus pérenne que la mienne.

    Quand on débute on a l'impression de profiter de l'expérience des autres plutôt que de générer un échange.
    Ce que je n'arrive pas à mettre en place c'est une boucle qui réponde aux conditions suivantes:

    A partir d’une date de référence (date D)
    J’ai un délai de livraison à plus 1,2 ou 3 jours
    J’aimerai calculer la date de livraison théorique en sautant les jours fériés et les weekends (ma table est nommée JNT (pour jours non travaillés)).

    Seule particularité, si l'heure d'intégration arrive après une heure précise de la journée (variable H), on rajoute un jour de délai.

    -----------------------

    J'espérais rentrer la logique : tant que l'on n'a pas D+1<>JNT, on rajoute 1
    Mais il ne faut pas faire J+2 ou J+3 voire J+4, mais plusieurs fois J+1 (pour ne pas sauter les WE ou jours fériés)

    -----------------------
    J'ai lu un truc un jour sur un forum : "Tant qu'on ne te dit pas que c'est impossible, alors tu as une chance d'y arriver !"
    Mais là c'est un peu balèze pour moi.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Il y a toujours plusieurs façons de faire (mais encore plus de façons de ne pas faire)

    Avec une table des jours travaillés, c'est par exemple un select top 3 et on prend le dernier enregistrement

    Avec une fonction, on peut faire une boucle qui ajoute 1 jour autant de fois que nécessaire pour avoir passé n jours non fériés
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Très bonne idée que le select top 3 avec la table des jours travaillés.
    Je vais partir là-dessus.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [IP-2003] Calcul d'une date de livraison
    Par ffreydoz dans le forum InfoPath
    Réponses: 5
    Dernier message: 02/06/2009, 10h01
  2. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 16h35
  3. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  4. SCRIPT CALCULANT LA DATE
    Par Redouane dans le forum ASP
    Réponses: 3
    Dernier message: 17/03/2004, 09h10
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

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