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
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
Je savais bien que j'avais oublié quelquechose :-D
Sous Excel
Merci
;-)
Dav
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 ?...
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 :![]()
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
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"))
J'ai retrouvé un vieux truc en VBA
Si quelqu'un a plus simple, je suis preneur
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
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
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 :
(je sais passi je me suis pas trompé dans la formule, mais c juste pour donner un exemple)
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")
ici weeklydays retourne 0.
Si je prend maintenant entre le 27 novembre et le 4 décembre :
weeklydays retournera la valeur 2 car il y a un week end entre
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")donc en tout ça retournera bien 5
![]()
- Avant de poster,
et http://www.developpez.com/sources/
- Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
- N'oubliez pas le
![]()
- N'oubliez pas le
si la réponse vous a été utile !
Ou bien tu peux utiliser un truc comme ça
Tu peux bien sûr prendre toutes les dates dans une feuille de calcul
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![]()
Juste pour embêter illight![]()
Grrr j'étais tout fier de ma macro![]()
![]()
![]()
- Avant de poster,
et http://www.developpez.com/sources/
- Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
- N'oubliez pas le
![]()
- N'oubliez pas le
si la réponse vous a été utile !
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 ?
Qui dit mieux ?
En attendant, on a perdu dav_e77... Si vous le voyez...![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager