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

Windows Forms Discussion :

Calcule jours fériés entre 2 dates


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Calcule jours fériés entre 2 dates
    Salutations!

    Voila j'ai un data gridview avec plusieurs colonnes dont deux qui sont des dates.

    je veux faire la différence de ces deux dates avec les jours fériés et d'autres paramètres.

    Je m'y prend comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oTable.Columns.Add("Ecart", Type.GetType("System.Double"))
                Dim oRow As DataRow
     
                For Each oRow In oTable.Rows
                    oRow("Ecart") = nbjourouvrable(oRow("DLVDAT_0"), oRow("XDLIVDEM_0"), oRow("XBQABR_0"))
                Next oRow
    et voila mes deux petites fonctions récupérée et remixée à ma sauce :
    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
    Public Function nbjourouvrable(ByRef deb As Date, ByRef fin As Date, ByVal Trig As String) As Double
            Dim nbJourtot As Double
            Dim i As Integer
     
            If deb = fin Then
                nbJourtot = 0
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
     
            Else
                nbJourtot = DateDiff(DateInterval.Day, deb, fin) '+ 1
     
                For i = 1 To nbJourtot
     
                    If ferie(deb) = True Then
                        nbJourtot = nbJourtot + 1
                    End If
     
                    fin = Today.AddDays(1)
     
                Next i
     
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
     
            End If
     
            Return nbJourtot
     
        End Function
    qui elle appelle :
    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
    Function ferie(ByVal Jour As Date) As Boolean
     
            Dim JJ, MM, AA As Integer
            Dim NbOr, Epacte As Integer
            Dim PLune, Paques, Ascension As Date
     
            JJ = Jour.Day
            MM = Jour.Month
            AA = Jour.Year
     
            If JJ = 1 And MM = 1 Then Return True '1 Janvier
            If JJ = 1 And MM = 5 Then Return True '1 Mai
            If JJ = 8 And MM = 5 Then Return True '8 Mai
            If JJ = 14 And MM = 7 Then Return True '14 Juillet
            If JJ = 15 And MM = 8 Then Return True '15 Août
            If JJ = 1 And MM = 11 Then Return True '1 Novembre
            If JJ = 11 And MM = 11 Then Return True '11 Novembre
            If JJ = 25 And MM = 12 Then Return True '25 Décembre
     
     
            NbOr = (AA Mod 19) + 1
            Epacte = CType((11 * NbOr - (3 + Int((2 + Int(AA / 100)) * 3 / 7))) Mod 30, Integer)
            PLune = CDate("19/04/" & AA)
            PLune = PLune.AddDays(-((Epacte + 6) Mod 30))
            If Epacte = 24 Then PLune = PLune.AddDays(-1)
            If Epacte = 25 And (AA >= 1900 And AA < 2000) Then PLune = PLune.AddDays(-1)
     
            'Paques
            Paques = PLune.AddDays(-Weekday(PLune) + vbMonday + 7)
            If JJ = Paques.Day And MM = Paques.Month Then Return True
     
            'Ascension
            Ascension = Paques.AddDays(38)
            If JJ = Ascension.Day And MM = Ascension.Month Then Return True
     
            Dim numjour
            numjour = Weekday(Jour, vbMonday) 'fixe à 6 et 7 la valeur du samedi & dimanche
            If numjour = 6 Or numjour = 7 Then Return True
     
        End Function
    en principe tout marche bien sauf une chose :
    lorsque je fait du pas à pas je remarque que les dates récupérée sont de cette forme : #1/5/2006# alors que mon code code (dsl pour la répétition)
    pour des dates de ce format : 05/01/2006...

    Voila, donc si vous avez une réponse j'enserai ravi!

    Thanks!

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    j'ai changer ceci :
    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
    Public Function nbjourouvrable(ByRef fin As Date, ByRef deb As Date, ByVal Trig As String) As Double
            Dim nbJourtot As Double
            Dim i As Integer
    
            If deb = fin Then
                nbJourtot = 0
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
    
            Else
                
                Dim Vdeb As Date = CDate(Mid(deb, 1, 10))
                Dim Vfin As Date = CDate(Mid(fin, 1, 10))
    
                nbJourtot = DateDiff(DateInterval.Day, Vfin, Vdeb) '+ 1
    
                For i = 1 To nbJourtot
    
                    If ferie(Vdeb) = True Then
                        nbJourtot = nbJourtot + 1
                    End If
    
                    Vdeb = Today.AddDays(1)
    
                Next i
    
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
    
            End If
    
            Return nbJourtot
    
        End Function
    et ça marche sauf pour les jours fériés...Pourquoi???

    Quelqu'un aurait-il une idée??? ou aurait-elle??

    Et en plus je remarque que les weekens ne sont pas comptabilisés....

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Re très chers compatriotes!!
    Voila j'ai arréter d'apeler une fonction pour simplifier le travail de la machine...
    mais toujours rien à faire, les jours fériés et weekend ne sont pas pris en compte...

    Je voudrai parcontre rajouter, au cas ou ce la apporterai quelque chose à la compréhension que les deux dates deb et fin dans la fonction sont en générale définit de cette manière : deb > fin, mais de temps en temps fin > deb...

    voila ce que j'ai fais en attendant qu'une bonne âme veuille s'occuper de moi...
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Public Function nbjourouvrable(ByVal fin As Date, ByVal deb As Date, ByVal Trig As String) As Double
            Dim nbJourtot As Double
            Dim i As Integer
     
            If deb = fin Then
                nbJourtot = 0
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
     
            Else
     
                nbJourtot = DateDiff(DateInterval.Day, fin, deb) '+ 1
                Dim a As Integer = deb.Day
                Dim b As Integer = fin.Day
     
                Dim numjour As Integer
                Dim numjour2 As Integer
                'fixe à 6 et 7 la valeur du samedi & dimanche
                numjour = Weekday(deb, FirstDayOfWeek.Saturday)
                numjour2 = Weekday(deb, FirstDayOfWeek.Sunday)
     
                Dim Mois As Integer = deb.Month
     
                For i = 1 To nbJourtot
     
                    Select Case Mois
                        Case 1
                            'Jour de l'an
                            If a = 1 Then
                                nbJourtot = nbJourtot + 1
                            End If
     
                        Case 5
                            'Fête du travail et Victoire
                            If a = 1 Or a = 8 Then
                                nbJourtot = nbJourtot + 1
                            End If
     
                        Case 7
                            'Fête Nationale
                            If a = 14 Then
                                nbJourtot = nbJourtot + 1
                            End If
                        Case 8
                            'Assomption
                            If a = 15 Then
                                nbJourtot = nbJourtot + 1
                            End If
     
                        Case 11
                            'Toussaint et Armistice
                            If a = 1 Or a = 11 Then
                                nbJourtot = nbJourtot + 1
                            End If
     
                        Case 12
                            'Noël
                            If a = 25 Then
                                nbJourtot = nbJourtot + 1
                            End If
                        Case Else
                            If numjour = 6 Or numjour2 = 7 Then
                                nbJourtot = nbJourtot + 1
                            End If
                    End Select
     
                    deb = deb.AddDays(1)
     
                Next i
     
                If Trig = "CCF" Then
                    nbJourtot = nbJourtot + 4
                Else
                    nbJourtot = nbJourtot + 2
                End If
     
            End If
     
     
     
                Return nbJourtot
     
        End Function

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Up!
    Un petit up pour un collègue en galère....

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2015, 23h01
  2. Calcul de jours ouvrés avec jours fériés entre deux dates
    Par grimgrim dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/03/2015, 21h12
  3. Extraire le nombre des jours fériès entre deux dates
    Par b.kawsam dans le forum Salesforce.com
    Réponses: 1
    Dernier message: 28/04/2014, 01h54
  4. Réponses: 3
    Dernier message: 09/09/2010, 17h47
  5. Réponses: 1
    Dernier message: 10/08/2006, 14h43

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