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