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

Macros et VBA Excel Discussion :

Nombre de jours ouvrés d'un mois


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Nombre de jours ouvrés d'un mois
    Bonjour,

    Quelqu'un aurait-il une idée permettant de donner le nombre de jours ouvrés d'un mois (Nombre de jours différents de samedi et dimanche)?

    Merci

    ;-)

    Dav

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 034
    Points
    20 034
    Par défaut
    ben avec quelle application ..?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Nombre de jours ouvrés d'un mois
    Je savais bien que j'avais oublié quelquechose :-D

    Sous Excel


    Merci

    ;-)

    Dav

  4. #4
    Membre régulier Avatar de zebulon2212
    Inscrit en
    juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : juin 2006
    Messages : 77
    Points : 88
    Points
    88
    Par défaut
    Petit exercice d'algorithmique ensuite on verra pour le codage :
    1) il faut dabord que tu recupere le mois dans lequel tu te trouve
    2) ensuite il faut que tu recupere le nombre de jour dans le mois
    3) l'exeception du mois de fevrier (28 ou 29 jour) il faut que tu recupere l'année, puis que tu fasse un petit calcul pour savoir si c'est une année bissextile (ptet que ca s'écrit pas comme ça) ou pas.
    a savoir si l'année est divisible par 4 oui c'est une année bissextile
    mais si elle est aussi divisible par 100 elle ne l'est plus sauf si elle est aussi divisible par 400
    4) ensuite tu recupere le jour d'une date donnée de ton mois (ca c facile ya une fonction intégré dans excel)
    5) tu compte le nombre de week end dans ton mois
    6) tu soustrait ton 5 a ton 2 obtenu en tenant compte de ton 3

    voila si tu fait l'algo je t'aide pour le codage.
    marché conclu ?...

  5. #5
    Membre expérimenté
    Avatar de BrunoM45
    Homme Profil pro
    DevOps : M365, WinDev
    Inscrit en
    juillet 2003
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : DevOps : M365, WinDev
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : juillet 2003
    Messages : 946
    Points : 1 320
    Points
    1 320
    Par défaut


    Il y a une fonction toute prète qui existe dans Excel :
    NB.JOURS.OUVRES(DateDébut;DateFin;MatriceJoursFériés)

    Il faut penser au jour férié !

    Tu as vraiment envie de développez ça en VBA !?

    Vous avez la solution à votre problème, pensez au tag :

  6. #6
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Petite question?

    Ne peux-t-on pas sous Excel consulter le calendrier de windows, récupérer le mois, le jours et le nombre de jours dans le mois actif.

    Je ne sais pas mais si c'est un outil qui fonctionne de mois en mois on peux peut-être le faire comme ça pour chaque mois ?

    De plus quand j'ouvre le calendrier Windows, si je change l'année, il me donne le bon nombre de jours ....

    Alors, est-ce possible ?

    C'est juste une question ...

    Ah ah ah ah

    Excellent BrunoM45, j'aurais du men douter

    lol

    Cordialement,
    Paloma



    Pensez au

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 271
    Points
    15 271
    Par défaut
    Si le format de la date est "jj/mm/aa" ou "... /aaaa", ne pas oublier de préciser Dateval
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.JOURS.OUVRES(DATEVAL("10/10/2006"); DATEVAL("10/11/2006"); DATEVAL("1/11/2006"))

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 271
    Points
    15 271
    Par défaut
    J'ai retrouvé un vieux truc en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Férié as boolean ', etc
    DateDébut = "10/07/2002"
    DateFin = "10/08/2002"
    JourFérié = "14/07/2002"
    For i = DateValue(DateDébut) To DateValue(DateFin)
        If CStr(Application.WorksheetFunction.WeekDay(i)) Like ("[2-6]") Then
            Férié = i = DateValue(JourFérié)
            NbJoursOuvrés = NbJoursOuvrés + 1 + Férié
        End If
    Next
    MsgBox NbJoursOuvrés
    Si quelqu'un a plus simple, je suis preneur

    Une explication :
    Like : permet d'identifier le jour de la semaine dont j'exclus 1 = Dimanche et 7 = Samedi
    Férié : si Férié = true, Férié = -1
    A toutes fins utiles

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    J'ai fait un truc de ce genre avec une fonction :

    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
    'nombre de jours ouvrés
    Function WeeklyDays(DateDepart As Date, DateFin As Date) As Long
    Dim d As Date
    Dim j As Long
    Dim n As Long
    n = 0
    For d = DateDepart To DateFin
        If Weekday(d) = vbSaturday Then
            n = n - 1
        ElseIf Weekday(d) = vbSunday Then
            n = n - 1
        Else
            For j = 1 To Feuil2.Range("A1").End(xlDown).Row
                If d = Feuil2.Cells(j, 1).Value Then
                    n = n - 1
                End If
            Next j
        End If
    Next d
    WeeklyDays = n
    End Function

    Dans la feuil2, il y a tous les jours fériés de l'année

    Cette fonction permet, quand on a à faire une différence de date, à enlever a ce nombre le nombre de jours fériés

    Par exemple, si on veux faire la différence entre le 27 novembre et le 29 novembre (sans jours fériés entre) il suffit d'écrire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datediff("d","27/11/2006","29/11/2006") - weeklydays("27/11/2006","29/11/2006")
    (je sais passi je me suis pas trompé dans la formule, mais c juste pour donner un exemple)

    ici weeklydays retourne 0.

    Si je prend maintenant entre le 27 novembre et le 4 décembre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datediff("d","27/11/2006","04/12/2006") - weeklydays("27/11/2006","04/12/2006")
    weeklydays retournera la valeur 2 car il y a un week end entre donc en tout ça retournera bien 5
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 271
    Points
    15 271
    Par défaut
    Ou bien tu peux utiliser un truc comme ça
    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
    Sub JoursOuvrés()
        DateDébut = "10/07/2002"
        DateFin = "10/08/2002"
        JourFérié = Array("01/01/2006", "24/04/06", "01/05/06", "08/05/06", "15/05/2006", "28/05/06", _
        "14/07/06", "15/08/06", "01/01/2007") ' etc
        n = 0
        For i = DateValue(DateDébut) To DateValue(DateFin)
            If CStr(Application.WorksheetFunction.WeekDay(i)) Like ("[2-6]") Then
                For n = 1 to Ubound(JourFérié)
                      Férié = i = DateValue(JourFérié(n))
                      if Férié then exit for
                Next n
                If Not Férié Then
                        NbJoursOuvrés = NbJoursOuvrés + 1 + Férié
                End If
            End If
        Next
        MsgBox "Nbre de jours => " & NbJoursOuvrés
    End Sub
    Tu peux bien sûr prendre toutes les dates dans une feuille de calcul
    Juste pour embêter illight

  11. #11
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Grrr j'étais tout fier de ma macro
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  12. #12
    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 227
    Points
    4 227
    Par défaut
    on peut remplacer cela par un jeu de fonctions
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    Public Function paq(an As Integer) As Date
    'calcule la date de pâques
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
    Dim f As Integer
    Dim g As Integer
    Dim h As Integer
    Dim j As Integer
    Dim k As Integer
    Dim r As Integer
    Dim m As Integer
    Dim n As Integer
    Dim p As Integer
    a = an Mod 19
    b = an \ 100
    c = an Mod 100
    d = b \ 4
    e = b Mod 4
    f = (b + 8) \ 25
    g = (b - f + 1) \ 3
    h = ((19 * a) + b - d - g + 15) Mod 30
    j = c \ 4
    k = c Mod 4
    r = (32 + (2 * e) + (2 * j) - h - k) Mod 7
    m = (a + (11 * h) + (22 * r)) \ 451
    n = (h + r - (7 * m) + 114) \ 31
    p = (h + r - (7 * m) + 114) Mod 31
    paq = DateSerial(an, n, p + 1)
    End Function
     
    Function ferie(unjour As Date) As String
    'attention au lundu de la pentecôte
    Dim mobile As Date
    mobile = paq(Year(unjour))
    If unjour = mobile Then
    ferie = "PÂQUES"
    Exit Function
    End If
    If unjour = mobile + 1 Then
    ferie = "LUND PÂQUES"
    Exit Function
    End If
    If unjour = mobile + 39 Then
    ferie = "ASCENCION"
    Exit Function
    End If
    If unjour = mobile + 49 Then
    ferie = "PENTECOTE"
    Exit Function
    End If
    If unjour = mobile + 50 Then
    ferie = " L PENTECOTE"
    Exit Function
    End If
    If Day(unjour) = 1 And Month(unjour) = 5 Then
    ferie = "FÊTE TRAV"
    Exit Function
    End If
    If Day(unjour) = 8 And Month(unjour) = 5 Then
    ferie = "VICT 1945"
    Exit Function
    End If
    If Day(unjour) = 14 And Month(unjour) = 7 Then
    ferie = "FET NAT"
    Exit Function
    End If
    If Day(unjour) = 1 And Month(unjour) = 11 Then
    ferie = "TOUSSAINT"
    Exit Function
    End If
    If Day(unjour) = 11 And Month(unjour) = 11 Then
    ferie = "ARMISTICE"
    Exit Function
    End If
    If Day(unjour) = 15 And Month(unjour) = 8 Then
    ferie = "ASOMPTION"
    Exit Function
    End If
    If Day(unjour) = 25 And Month(unjour) = 12 Then
    ferie = "NOEL"
    Exit Function
    End If
    If Day(unjour) = 1 And Month(unjour) = 1 Then
    ferie = "JOUR AN"
    Exit Function
    End If
    ferie = ""
    End Function
     
     
    Function nbjourouvr(ByVal date1 As Date, ByVal date2 As Date) As Variant
    'cette fonction calcule le nombre de jours ouvrés entre deux jours
    Dim tempo As Date
    Dim nb As Long
    Dim boucle As Long
    Dim ouvr As Boolean
    If date2 < date1 Then
    tempo = date1
    date1 = date2
    date2 = tempo
    End If
    For boucle = CLng(date1) To CLng(date2)
    'à priori un jour est ouvrable
    ouvr = True
    tempo = CDate(boucle)
    'si le jour de la semaine est dimanche ou samedi c'est pas ouvré
    If Weekday(tempo, vbSunday) = 1 Or Weekday(tempo, vbSunday) = 7 Then
    ouvr = False
    'sinon on teste si c'est un jour férié
    Else
    If ferie(tempo) <> "" Then ouvr = False
    End If
    If ouvr Then nb = nb + 1
    Next boucle
    nbjourouvr = nb
    End Function
    Elle est pas belle la vie ?

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 271
    Points
    15 271
    Par défaut
    Qui dit mieux ?
    En attendant, on a perdu dav_e77... Si vous le voyez...

Discussions similaires

  1. [AC-2013] Calcul du nombre de jours ouvrés par mois entre deux dates
    Par lumpys dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/04/2014, 09h59
  2. Nombre de jours ouvrés mois apres mois
    Par krof77 dans le forum Excel
    Réponses: 6
    Dernier message: 29/11/2012, 04h25
  3. Fonction qui compte le nombre de jours ouvrés par mois
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/07/2006, 15h32
  4. Excel : Nombre de jours ouvrés dans un mois
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2005, 10h09
  5. Nombre de jours ouvrés entre 2 dates
    Par motlerang dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2005, 13h25

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