C@thy
XLDnaute Barbatruc
Bonjour les amis,
Je sépare ce fil https://www.excel-downloads.com/threads/vba-ajouter-n-jours-ouvres-a-la-date-du-jour.170492/ en deux car sinon on mélange un peu les problèmes, donc ce sera plus clair :
voici ce que j'essaie de faire :
différence entre lundi 30/04/2012 et mercredi 02/05/2012 doit me donner 1 jour d'écart car le 1er mai est férié, j'ai donc répondu à la demande dans le délai d'1 jour et non pas 2
(je précise bien car si je fais le calcul entre 2 dates normales distantes d'un jour (par ex.le mardi et le mercredi non fériés de la même semaine) je dois obtenir 1 jour mais avec
=NB.JOURS.OUVRES(A1;B1;feries) j'obtiens le résultat 2
alors qu'avec B1-A1 j'obtiens le bon résultat à savoir 1)
euh... vous me suivez toujours...???
donc mon problème est le suivant : je veux calculer l'écart entre 2 dates :
A1 = lundi 30/04/2012 B1 = mercredi 02/05/2012 en C1 : = B1-A1 j'obtiens 1
A1 = mercredi 02/05/2012 B1 = lundi 30/04/2012 D2 en C1 : = B1-A1 j'obtiens -1
ça c'est une première énigme sur laquelle je me suis penchée...
(mais contrairement à la chanson d'Adamo, je n'ai pas entendu un requiem quand sur elle je me suis penchée...)
deuxième énigme (je penche de plus en plus... et je penche donc je suis...) :
A1 = mercredi 02/05/2012 B1 = -1
opération à effectuer en C1 : = A1 + B1 donc résultat en C1 : lundi 30/04/2012
Pire que ça :
A1 = lundi 02/01/2012 B1 = -1 résultat à obtenir en C1 : vendredi 30/12/2011
Arf! Si JNP me voit, il va encore me dire que je pose des questions 'achement dures
mais il me dirait sans doute aussi (enfin j'espère...) que ce sont les questions dures qui font progresser...
Merci à vous si vous avez une solution ou une partie de solution ou un début de piste
pour ne rien vous cacher j'ai fait des tentatives, mais j'ai un peu honte...
Je sépare ce fil https://www.excel-downloads.com/threads/vba-ajouter-n-jours-ouvres-a-la-date-du-jour.170492/ en deux car sinon on mélange un peu les problèmes, donc ce sera plus clair :
voici ce que j'essaie de faire :
différence entre lundi 30/04/2012 et mercredi 02/05/2012 doit me donner 1 jour d'écart car le 1er mai est férié, j'ai donc répondu à la demande dans le délai d'1 jour et non pas 2
(je précise bien car si je fais le calcul entre 2 dates normales distantes d'un jour (par ex.le mardi et le mercredi non fériés de la même semaine) je dois obtenir 1 jour mais avec
=NB.JOURS.OUVRES(A1;B1;feries) j'obtiens le résultat 2
alors qu'avec B1-A1 j'obtiens le bon résultat à savoir 1)
euh... vous me suivez toujours...???
donc mon problème est le suivant : je veux calculer l'écart entre 2 dates :
A1 = lundi 30/04/2012 B1 = mercredi 02/05/2012 en C1 : = B1-A1 j'obtiens 1
A1 = mercredi 02/05/2012 B1 = lundi 30/04/2012 D2 en C1 : = B1-A1 j'obtiens -1
ça c'est une première énigme sur laquelle je me suis penchée...
(mais contrairement à la chanson d'Adamo, je n'ai pas entendu un requiem quand sur elle je me suis penchée...)
deuxième énigme (je penche de plus en plus... et je penche donc je suis...) :
A1 = mercredi 02/05/2012 B1 = -1
opération à effectuer en C1 : = A1 + B1 donc résultat en C1 : lundi 30/04/2012
Pire que ça :
A1 = lundi 02/01/2012 B1 = -1 résultat à obtenir en C1 : vendredi 30/12/2011
Arf! Si JNP me voit, il va encore me dire que je pose des questions 'achement dures
mais il me dirait sans doute aussi (enfin j'espère...) que ce sont les questions dures qui font progresser...
Merci à vous si vous avez une solution ou une partie de solution ou un début de piste
pour ne rien vous cacher j'ai fait des tentatives, mais j'ai un peu honte...
Code:
Function NBJoursOuvres(DateDebut, DateFin)
Dim I As Long
an = Year(Date)
For m = LBound(Fer(an)) To UBound(Fer(an))
lesferies = lesferies & CStr(Fer(an)(m)) & ","
Next m
If DateDebut < DateFin Then
For I = DateDebut To DateFin
NBJoursOuvres = NBJoursOuvres + (Weekday(CDate(I)) <> 1 And _
Weekday(CDate(I)) <> 7) And InStr(lesferies, CStr(CLng(n))) = 0* True
Next
Else
For I = DateDebut To DateFin Step -1
NBJoursOuvres = NBJoursOuvres - (Weekday(CDate(I)) <> 1 And _
Weekday(CDate(I)) <> 7) And InStr(lesferies, CStr(CLng(n))) = 0 * True
Next
End If
End Function
Function fer(an%) 'liste de tous les jours fériés
Dim pq
pq = paq(an)
fer = Array(CLng(DateSerial(an, 1, 1)), CLng(DateSerial(an, 5, 1)), CLng(DateSerial(an, 5, 8)), CLng(DateSerial(an, 7, 14)), CLng(DateSerial(an, 8, 15)), CLng(DateSerial(an, 11, 1)), CLng(DateSerial(an, 11, 11)), CLng(DateSerial(an, 12, 25)), pq + 1, pq + 39, pq + 50)
End Function