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 :

vb.net : calcul de nbre de jours ouvrables


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut vb.net : calcul de nbre de jours ouvrables
    slt à toute la communauté,
    j'ai un souci et j'aimerais partager avec vous afin d'en solutionner.
    j'aimerais calculer le nombre de jours ouvrables entre 2 dates.
    je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.NBRE_JOURS.text = DateDiff(DateInterval.Day,Me.DateTime_debut.Value, Me.DateTime_fin.Value)
    mais cela n'est pas suffisant je calcule en ce moment le nombre de jours entre 2 dates uniquement.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Voila une solution, c'est bête-comme choux (pardonnez-moi messieurs choux), mais ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Sub Main()
     
            'On récupére les variables ds le bon format
            Dim T0 As Date = Convert.ToDateTime(Console.ReadLine())
            Dim T1 As Date = Convert.ToDateTime(Console.ReadLine())
            'on calcul le nb de jour total
            Dim NBjours As Integer = DateDiff(DateInterval.Day, T0, T1)
            'on prend le nb de semaine (jour /7) puis on retire le samedi -dimanche ( *5)
            Dim NBjoursTravailés As Integer = (NBjours / 7) * 5
            'et on sort tout ça !
            Console.WriteLine("nb de jour travaillés :" & NBjoursTravailés)
            Console.Read()
        End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 57
    Par défaut
    Citation Envoyé par mamatheking Voir le message
    Voila une solution, c'est bête-comme choux (pardonnez-moi messieurs choux), mais ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim NBjours As Integer = DateDiff(DateInterval.Day, T0, T1)
            'on prend le nb de semaine (jour /7) puis on retire le samedi -dimanche ( *5)
            Dim NBjoursTravailés As Integer = (NBjours / 7) * 5
    Bonjour, je suis débutant, donc excusez moi si ce n'est pas pertinent, mais d'après moi:
    Si NBjours n'est pas divisible par 7, on va avoir une erreur non??
    Exemple:
    NB_jours = 11 jours
    Or 11/7= 1.57, ce n'est pas un entier d'ou:

    NBjoursTravaillés=11/7 *5=7.8... si on travaille en rééls

    NBjoursTravaillés=11/7 *5=10 si on travaille en Entier (Dans ce cas, 11/7 est arrondi au supérieur)

    J'avais trouvé un code sur DVP concernant les dates, et on pouvait faire toute sorte d'opérations y compris celle-ci, je vais le chercher.

    Bonne journée

    edit: au cas ou, voici déjà un lien pour faire une différence entre deux dates: http://faqvbnet.developpez.com/?page...meBetweenDates
    J'arrive pas à retrouver le lien dont je te parlais au dessus :/

  4. #4
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    bonjour et merci à vous,

    Si NBjours n'est pas divisible par 7, on va avoir une erreur non??
    Exemple:
    NB_jours = 11 jours
    Or 11/7= 1.57, ce n'est pas un entier.
    je la solution de divisibilité entraine de erreurs d'exactitude du Nbrejours.

  5. #5
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    j'ai trouvé une solution mais l'incrementation de ma variable de type date me pose problème. voici ma solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Calacul_Nbre_Jrs_Ouvrable(ByVal Date_Debut As Date, ByVal Date_Fin As Date)
            Dim n As Integer = 0  'n = nbre de jours non ouvrables
            Dim dateValue As Date = Date_Debut
            Do
                If dateValue.DayOfWeek Or dateValue.DayOfYear Then
                    n = n + 1 
                    dateValue.Add() ' Comment dois je incerementer cette variable de type Date
                End If
            Loop Until dateValue <= Date_Fin
            NBRE_JOURS.Text = (DateDiff(DateInterval.Day, Date_Debut, Date_Fin)) - n
        End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Faut en premier lieu définir précisement ce que tu entends par jours ouvrables !

    Je vais t'économiser du temps dans un futur proche quand on va te demander de ne pas compter les jours fériés. Après il y a encore la problèmatique de la localisation et la culture. (Ex. à Dubai on a congé le vendredi et samedi mais on bosse le dimanche, certaines entreprises font des ponts (Noël - nouvel an) ou on des jours fermé spécifique (En suisse la plupart des coiffeurs sont fermé le lundi par exemple)). La librairie externe a donc une couverture très limitée sur ce sujet!

    Pour résoudre cette problématique, il n'est pas rare de devoir créer une interface et une source de donnée permettant de lister les jours ouvrables/fermés du calendrier manuellement.

    Si tu as une telle source, ta problématique initiale devient alors triviale (c'est le compte du nombre d'enregistrement dans ta source entre les 2 dates)

    Bonne chance !

  7. #7
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    salut sinople,
    les jours ouvrables commencent du lundi au vendredi.
    dans ma solution précédente je soustrais les samedi et dimanche dans l'intervalle de 2 dates et j'ai les jours ouvrables.
    mais l'incrémentation de ma date me pose problème.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 706
    Par défaut
    Bonjour,
    les jours ouvrables (différents des jours ouvrés), ne tiennent pas compte de la culture de l'entreprise (Ponts, habitudes, etc...).
    C'est-à-dire tous les jours du calendrier à l'exception des jours correspondant au repos hebdomadaire légal et des jours fériés.
    En France, le jour de repos est le dimanche.
    Pour les jours fériés, c'est une autre histoire, surtout au Burkina, où l'on doit tenir compte de Pâques et du Ramadan, qui ne sont pas à des dates fixes.
    (Sauf erreur).
    Bon courage, mais c'est possible.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sinople Voir le message
    Faut en premier lieu définir précisement ce que tu entends par jours ouvrables !

    Je vais t'économiser du temps dans un futur proche quand on va te demander de ne pas compter les jours fériés. Après il y a encore la problèmatique de la localisation et la culture. (Ex. à Dubai on a congé le vendredi et samedi mais on bosse le dimanche, certaines entreprises font des ponts (Noël - nouvel an) ou on des jours fermé spécifique (En suisse la plupart des coiffeurs sont fermé le lundi par exemple)). La librairie externe a donc une couverture très limitée sur ce sujet!

    Pour résoudre cette problématique, il n'est pas rare de devoir créer une interface et une source de donnée permettant de lister les jours ouvrables/fermés du calendrier manuellement.

    Si tu as une telle source, ta problématique initiale devient alors triviale (c'est le compte du nombre d'enregistrement dans ta source entre les 2 dates)

    Bonne chance !
    Effectivement de ce point de vue, c'est plus complexe !

    Sinon tu peu passer toute les date dans une boucle et ajouter 1 à une variable à chaque fois que le jour est ouvrable.

    Je crois que tu peux pour t'aider utiliser DayOfweek.

    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
            'On récupére les variables ds le bon format
            Dim T0 As Date = Convert.ToDateTime(Console.ReadLine())
            Dim T1 As Date = Convert.ToDateTime(Console.ReadLine())
            Dim Jours As Integer
            'on calcul le nb de jour total
            While T0 <= T1
                If T0.DayOfWeek = DayOfWeek.Saturday Or T0.DayOfWeek = DayOfWeek.Sunday Then
     
                    ' ElseIf  T0 = noël or T0 = 1er mai ...
                Else
                    Jours = Jours + 1
                End If
                T0 = T0.AddDays(1)
            End While
            'et on sort tout ça !
            Console.WriteLine("nb de jour travaillés :" & Jours)
            Console.Read()
    Edit : ça ressemble à ton post précédent, mais il te manquait un petit quelque chose au niveau du if (=) et pareil pour addDays

  10. #10
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut Nbre de jours ouvrables
    merci bien.
    oui ça ressemble à mon post précedent et merci pour les corrections.
    cool

  11. #11
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut Calcul Nbre de jours ouvrables (Resolu)
    j'ai revu ma fonction et elle marche bien.
    Merci à tous.
    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
     Private Function Calacul_Nbre_Jrs_Ouvrable(ByVal Date_Debut As Date, ByVal Date_Fin As Date)
            Dim NBRE_JOUR As Integer = 0
            Dim Jours_ouvrables As Integer
            'on calcul le nb de jour total
            While Date_Debut <= Date_Fin
                If Date_Debut.DayOfWeek = DayOfWeek.Saturday Or Date_Debut.DayOfWeek = DayOfWeek.Sunday Then
                    'pour les samedi et dimanche
                Else
                    Jours_ouvrables = Jours_ouvrables + 1
                End If
                Date_Debut = Date_Debut.AddDays(1)
            End While
     
            Return (Jours_ouvrables)
        End Function

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ajouterais pour embrouiller encore plus que certains jours fériés ne tombent pas le même jour tous les ans (paques et autres) et que certaines régions françaises ont plus de jours de congés que d'autres (alsace par exemple)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonsoir CyberSpace,

    Je sais que tu considère ton sujet comme résolu mais voici un code VBA qui te permets d'avoir les jours fériés.
    A toi de l'adapter à tes besoins.

    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
    48
    49
    50
    51
    52
    Function EstFerie(ByVal QuelleDate As Date) As Boolean
     
    'Vérifie si la date correspond à un jour férié
    Dim AnneeDate As Integer
    Dim JoursFeries(1 To 11) As Date
     
      AnneeDate = Year(QuelleDate)
     
      JoursFeries(1) = DateSerial(AnneeDate, 1, 1) '1° janvier
      JoursFeries(2) = DateSerial(AnneeDate, 5, 1)  '1° mai
      JoursFeries(3) = DateSerial(AnneeDate, 5, 8) '8 mai
      JoursFeries(4) = DateSerial(AnneeDate, 7, 14) '14 juillet
      JoursFeries(5) = DateSerial(AnneeDate, 8, 15) '15 août
      JoursFeries(6) = DateSerial(AnneeDate, 11, 1) '1° novembre
      JoursFeries(7) = DateSerial(AnneeDate, 11, 11) '11 novembre
      JoursFeries(8) = DateSerial(AnneeDate, 12, 25) 'Noël
     
      JoursFeries(9) = fLundiPaques(AnneeDate)
      JoursFeries(10) = JoursFeries(9) + 38 ' Ascension = lundi de Pâques + 38
      JoursFeries(11) = JoursFeries(9) + 49 ' Lundi Pentecôte = lundi de Pâques + 49
     
      For i = 1 To 11
        If QuelleDate = JoursFeries(i) Then
          EstFerie = True
          Exit For
        End If
      Next
     
    End Function
     
    Private Function fLundiPaques(ByVal Iyear As Integer) As Date
     
            'Adapté de plusieurs scripts...
            Dim L(6) As Long, Lj As Long, Lm As Long
     
            L(1) = Iyear Mod 19: L(2) = Iyear Mod 4: L(3) = Iyear Mod 7
            L(4) = (19 * L(1) + 24) Mod 30
            L(5) = ((2 * L(2)) + (4 * L(3)) + (6 * L(4)) + 5) Mod 7
            L(6) = 22 + L(4) + L(5)
     
            If L(6) > 31 Then
                    Lj = L(6) - 31
                    Lm = 4
            Else
                    Lj = L(6)
                    Lm = 3
            End If
     
            ' Lundi de Pâques = Paques + 1 jour
            fLundiPaques = DateAdd("d", 1, (Lj & "/" & Lm & "/" & Iyear))
     
    End Function
    Cordialement

    Christophe

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il n'est pas en france, donc les jours fériés français ne l’intéresse peut être pas ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre averti
    Homme Profil pro
    freeLance
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : freeLance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut Jours feriés
    slt marsouin_89
    Merci pour ce post;je vais l'adapter à mes besoins.
    Merci a vous.
    cool

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

Discussions similaires

  1. [AC-2007] Calculer le nombre de jours ouvrables entre 2 dates
    Par sarah12 dans le forum VBA Access
    Réponses: 7
    Dernier message: 06/05/2015, 11h30
  2. [AC-2007] calcul ecart entre date jour ouvrable
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 04/12/2012, 13h51
  3. [AC-2007] Calculer le nombre de jours ouvrables entre 2 dates
    Par Viggen0020 dans le forum Requêtes et SQL.
    Réponses: 21
    Dernier message: 27/03/2009, 08h59
  4. Réponses: 1
    Dernier message: 11/09/2007, 12h10
  5. [Dates] calculer le nombre de jour ouvrable entre 2 dates
    Par pimpmyride dans le forum Langage
    Réponses: 1
    Dernier message: 20/11/2006, 17h10

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