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

VB.NET Discussion :

code jours feriés


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Collégien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut code jours feriés
    bjr

    j'ai une echeancier (des dates de paiment ) affiché sur des labels par exemple

    label 1 =08/10/2019(date paimenet)
    label2 = 12/11/2019(date paimenet)
    label3 = 10/12/2019(date paimenet) etc


    une liste box affichant les dates des jours feriés

    je cherche un code lorsqu'il y a un jour ferié par exemple le 08/10/2019 est un jour ferié , la date de paiement qui s'afiche dans label1 sera 07/10/2019 càd jour avant ouvrable et si ce se coincide avec le samedi et dimanche le jour qui cherché est le vendredi

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Une simple boucle suffit à répondre à ta problématique.
    Cependant, si au final ces données ont pour vocation à être utilisées avec une base de données, une table "calendrier" avec tous les jours avec information si c'est un jour ouvré ou non sera d'une grande aide pour tout simplifier.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut
    Voici un code te permettant de déterminer si un jour est ferié (tous sont fixes, sauf Lundi de Paques et Ascension)

    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
     Function IsFerie(dDate As Date) As Boolean
            Dim Paques As Date, Lundi2Paques As Date, Ascension As Date
     
            Paques = GetPaques(Year(dDate))
            Lundi2Paques = Paques.AddDays(1)
            Ascension = Paques.AddDays(39)
            With dDate
     
                IsFerie = .Date.Equals(Lundi2Paques) Or .Date.Equals(Ascension) _
                  Or (.Day = 1 And .Month = 1) Or (.Day = 1 And .Month = 5) _
                  Or (.Day = 8 And .Month = 5) Or (.Day = 14 And .Month = 7) _
                  Or (.Day = 15 And .Month = 8) Or (.Day = 1 And .Month = 11) _
                  Or (.Day = 11 And .Month = 11) Or (.Day = 25 And .Month = 12)
     
            End With
        End Function
     
        Function GetPaques(Annee As Integer) As Date
            Dim Y As Int16, G As Int16, C As Int16, X As Int16, Z As Int16, D As Integer, e As Integer, N As Integer, P As Integer, J As Integer, M As Integer
            Y = Annee
            G = (Y Mod 19) + 1
            C = Int((Y / 100)) + 1
            X = Int(3 * C / 4) - 12
            Z = Int(((8 * C) + 5) / 25) - 5
            D = Int(((5 * Y) / 4) - X - 10)
            e = ((11 * G) + 20 + Z - X) Mod 30
            If ((e = 25) And (G > 11)) Or (e = 24) Then e = e + 1
            N = 44 - e
            If N <= 21 Then N = N + 30
     
            P = N + 7 - ((D + N) Mod 7)
            If P > 31 Then
                J = P - 31
            Else
                J = P
            End If
            If J = P Then
                M = 3
            Else
                M = 4
            End If
     
            GetPaques = CDate(Str(J) + "/" + Str(M) + "/" + Str(Annee))
     
        End Function
    Il te suffira alors de mettre pour chaque date quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If IsFerie(MyDate) then
      MyDate=MyDate.AddDays(-1)
      If MyDate.DayOfWeek=DayOfWeek.Sunday then
        MyDate=MyDate.AddDays(-2)
      ElseIf  MyDate.DayOfWeek=DayOfWeek.Saturday then
        MyDate=MyDate.AddDays(-1)
      EndIf
    Else
      MyDate=MyDate
    EndIf
    Ca peut être amélioré (function récursive par exemple) mais ça marche quelque soit l'année de ta date

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zitoune92 Voir le message
    Il te suffira alors de mettre pour chaque date quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If IsFerie(MyDate) then
      MyDate=MyDate.AddDays(-1)
      If MyDate.DayOfWeek=DayOfWeek.Sunday then
        MyDate=MyDate.AddDays(-2)
      ElseIf  MyDate.DayOfWeek=DayOfWeek.Saturday then
        MyDate=MyDate.AddDays(-1)
      EndIf
    Else
      MyDate=MyDate
    EndIf
    Ca peut être amélioré (function récursive par exemple) mais ça marche quelque soit l'année de ta date
    Pas sûr que ça fonctionne.
    Dans ton exemple, si un vendredi est férié et que la date testée est un samedi ou dimanche, ça ne fonctionne pas.

    Je verrai plutôt :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If IsFerie(MyDate) then
      MyDate=MyDate.AddDays(-1)
    EndIf
     
    If MyDate.DayOfWeek=DayOfWeek.Sunday then
      MyDate=MyDate.AddDays(-2)
    ElseIf  MyDate.DayOfWeek=DayOfWeek.Saturday then
      MyDate=MyDate.AddDays(-1)
    EndIf

    Par contre, attention si on a des jours fériés qui se suivent de près (à priori, ce n'est pas le cas, mais sait-on jamais).

    Une approche plus sûre serait (et accessoirement plus courte) :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    While MyDate.DayOfWeek=DayOfWeek.Sunday or MyDate.DayOfWeek=DayOfWeek.Saturday or IsFerie(MyDate)
      MyDate=MyDate.AddDays(-1)
    End While

    On peut d'ailleurs soit intégrer le test sur samedi et dimanche dans la fonction IsFerie(), soit créer IsJourNonOuvrable() qui effectue tous les tests, afin d'alléger la condition du while.

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Cela me semble (un peu) éloigné de ce que tu demandes, mais si tu te rends là, le contrôle MonthCalendar permet de colorer en disons, noir des dates déterminées. Et c'est dans les propriétés.

    Pour tes fériés à dates fixes (11 novembre, 1er mai, 25 décembre), et cela varie selon les juridictions, un simple tableau ou, un dictionnaire peut faire l'affaire. Pour d'autres comme Pâques, il existe des algorithmes sur différents sites.

    Mais, de par chez-nous, il y a aussi des congés qui sont à jour fixe, mais pas à date fixe. Par exemple le premier lundi de septembre ou le deuxième lundi d'octobre. Cela, ça demande un peu plus de calculs, parce que les calendriers se "promènent" d'année en année.

Discussions similaires

  1. les jours feries et weekend
    Par imane_bennouna dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 19/01/2011, 12h29
  2. Réponses: 5
    Dernier message: 19/10/2006, 23h25
  3. requete jour ferié
    Par Flblbl dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 27/07/2006, 10h52
  4. Jours Feries
    Par beurnoir dans le forum Access
    Réponses: 1
    Dernier message: 07/10/2005, 14h08
  5. Calcul des jours feriés
    Par obione dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2003, 12h36

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