Excel : Nombre de jours entre deux dates

Résolu/Fermé
maloplekxus - 19 mars 2012 à 11:48
Marco9233 Messages postés 1 Date d'inscription mardi 10 juillet 2012 Statut Membre Dernière intervention 10 juillet 2012 - 10 juil. 2012 à 10:07
Bonjour,

Mon problème est un peu plus complexe que ce laisse entendre le titre. Malheureusement je n'ai pas réussi à le résoudre avec un simple datedif(). Ainsi je m'en remet à vous.

Sous excel j'ai une base des accidents du travail, dans laquelle j'ai des accidents avec arrêt. Afin de réaliser des statistiques, je cherche à savoir par exemple combien de jour la personne à été arrêté au mois de février et combien de jours pour le mois de mars, sachant que sa période d'arrêt à débuté le 22/02 et se termine le 15/03.

Cordialement,



A voir également:

8 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
19 mars 2012 à 12:31
Bonjour,

Pour du VBA:

'd pour jour
x = DateDiff("d", "22/02/2012", "15/03/2012")

Bonne suite
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 19/03/2012 à 12:33
Bonjour
en A1 début ITT
en B1 fin ITT

pour février ( à mettre au format-nombre standard)
=SI(NB(A1:B1)<2;"";SI(MOIS(B1)>MOIS(A1);FIN.MOIS(A1;0)-A1;B1-A1))
tu peux trouver pour Mars sur le m^me principe

si version XL <2007:
outils-macros complémentaires-activer utilitaire d'analyse pou la foncction FIN.MOIS
Michel
0
maloplekxus
20 mars 2012 à 11:11
Merci à tous pour vos réponse,

Michel_m, votre formule fonctionne mis à part qu'il manque un jour. Néanmoins mon besoin est je crois encore un peu différent. En effet je peux avoir un accident avec arrêt, dont l'arrêt va du 14/01/2012 au 5/06/2012. Les données dont j'ai besoin dans le cas présent sont le nombre de jour d'arrêt en janvier(18), le nombre pour février (29), le nombre pour mars (31), etc...

A force de me torturer l'esprit j'ai trouvé quelque du même style que michel_m :

=SI(ET(A1<A2;B1>B2);(B1-A1)-(A2-A1)-(B1-B2);
(SI(ET(A1>=A2;B1<=B2);(B1-A1);
(SI(ET(A1>=A2;A1<B2;B1>B2);(B1-A1)-(B1-B2);
(SI(ET(A1<A2;B1>A2;B1<=B2);(B1-A1)-(A2-A1);"")))))))

A1 correspond à la date de début d'arrêt et B1 la date de fin d'arrêt.
A2 correspond à la date du 01/02/2012 et B2 à la date du 01/03/2012.
Cet exemple est donc valable pour le mois de février. si je veux pour mars je modifie A2 et B2.

Cette formule n'étant valable que pour un at et pour un mois, serait il possible de la créer en vba avec des plages ? si oui pouvez vous m'aider ?
Si vous le souhaiter je peux vous mettre le classeur en exemple, dite moi seulement où je peux l'héberger.

Cordialement.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 20/03/2012 à 12:15
Bonjour,
pour joindre une pièce
mettre le classeur sans données confidentielles, au format Excel 97-2003, en pièce jointe sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse

j'ai trouvé quelque du même style que michel_m :
j'crois pas que ca soit mon style!!! :o) mais c'est pas grave

Il manque un jour effectivement si on fait la différence de date, on ne compte pas le dernie rjour, excuses moi.
0
voici le lien pour télécharger mon fichier http://cjoint.com/data3/3CuoKaJEzb5.htm. J'ai supprimé les données confidentielles et je l'ai épuré pour ne laisser que ce qui peut vous interesser.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 mars 2012 à 16:42
pièce jointe illisible car format Xl2007

POURTANT JE L'AVAIS PRÉCISÉ EN GRAs

abandon du suivi
0
Fichier en excel 1997-2003 : http://cjoint.com/?3CutG3gA6yx

Dsl pour mon inattention par rapport au format attendu

Cordialement,
0
Voila ce que j'ai tenté jusqu'à présent sans grand succés

Function nombre_jours_arret_janvier(date1, date2)

Dim annee
annee = Sheets("TABBORD MCP").Range("o2").Value 'variable annee correspond à valeur entrée manuellement sur la feuille TABBORD MCP, cellule O2

nombre_jours_arret_janvier = IF(AND(date1<01/01/2012;date2>01/02/2012);(date2-date1)-(01/01/2012-date1)-(date2-01/02/2012);(IF(AND(date1>=01/01/2012;date2<=01/02/2012);(date2-date1);(IF(AND(date1>=01/01/2012;date1<01/02/2012;date1>01/02/2012);(date2-date1)-(date2-01/02/2012);(IF(AND(date1<01/01/2012;date2>01/01/2012;date2<=01/02/2012);(date2-date1)-(01/01/2012-date1);"")))))))

End Function


date1 --> début de l'arrêt de travail
date2 --> fin de l'arrêt de travail

Avec la variable annee, je souhaiterais en plus pouvoir mettre la date 01/01 ou 01/02 + annee (2012 ou 2013, etc)

Le but final serait d'avoir un classeur modèle, que l'on copi-colli et renomme en début d'année, mais qui doit donc être intemporel. Cela permet de garder un classeur vierge qui reste valable année après année et je ne veux pas que l'utilisateur est besoin de modifier quoi que ce soit dans vba.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai tenté de retravailler mon code, mais au finale j'obtiens 0.
Pouvez vous m'aidez s'il vous plaît, je n'arrive pas à identifier mes erreurs.


Function nombre_jours_arret_janvier(date1, date2)

Dim annee
Dim debut_mois_janvier as date
Dim fin_mois_janvier as date
annee = Sheets("TABBORD MCP").Range("o2").Value 'variable annee correspond à valeur entrée manuellement sur la feuille TABBORD MCP, cellule O2
debut_mois_janvier = "01/01/" & annee
fin_mois_janvier = "01/02/" & annee

If (date1 < debut_mois_janvier) And (date2 > fin_mois_janvier) Then
nombre_jours_arret_janvier(date1, date2) = (date2 - date1) - (debut_mois_janvier - date1) - (date2 - fin_mois_janvier)

ElseIf (date1 >= debut_mois_janvier) And (date2 <= fin_mois_janvier) Then
nombre_jours_arret_janvier(date1, date2) = (date2 - date1)

ElseIf (date1 >= debut_mois_janvier) And (date1 < fin_mois_janvier) And (date1 > fin_mois_janvier) Then
nombre_jours_arret_janvier(date1, date2) = (date2 - date1) - (date2 - fin_mois_janvier)

ElseIf (date1 < debut_mois_janvier) And (date2 > debut_mois_janvier) And (date2 <= fin_mois_janvier) Then
nombre_jours_arret_janvier(date1, date2) = (date2 - date1) - (debut_mois_janvier - date1)

Else
nombre_jours_arret_janvier(date1, date2) = ""
End If

End Function
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 mars 2012 à 13:28
t'es pas obligé de tenir compte de mes indications pour joindre un fichier...

Ciao
0
maloplekxus
21 mars 2012 à 11:32
finalement je ne suis pas passé par la création une fonction sur vba, mais juste par des formules.

Pour janvier, j'ai indiqué dans deux cellules :
- A2 =dateval("01/01/"&'feuil1'!a1)
- B2 =dateval("01/02/"&'feuil1'!a1)


'feuil1'a1 correspond a l'année concerné. Cette cellule est mise à jour manuellement.

ensuite je travaille avec la formule suivante que je peux ensuite étirer comme je le souhaite :
- =SI(ET($A1<$A$2;$B1>$B$2);($B1-$A1)-($A$2-$A1)-($B1-$B$2);
(SI(ET($A1>=$A$2;$B1<=$B$2);($B1-$A1);
(SI(ET($A1>=$A$2;$A1<$B$2;$B1>$B$2);($B1-$A1)-($B1-$B$2);
(SI(ET($A1<$A$2;$B1>$A$2;$B1<=$B$2);($B1-$A1)-($A$2-$A1);"")))))))


Je joint le classeur en exemple pour ceux qui pourraient en avoir besoin.

http://cjoint.com/?BCvlETfd4Ll : classeur excel 2007
http://cjoint.com/?BCvlFNJCG7F : classeur excel 97-2003

Cordialement,
0
Marco9233 Messages postés 1 Date d'inscription mardi 10 juillet 2012 Statut Membre Dernière intervention 10 juillet 2012
10 juil. 2012 à 10:07
J'ai eu le même problème, donc j'apporte ma contribution, vu que je me suis servi de ce qui a été partagé ci-dessus.

Calcul du nombre de jour d'arrêt, par mois.

En B6 Date de début (ex : 01/01/2012)
En C6 Date de fin (ex : 10/02/2012)
En D6 résultat Nb jours en janvier
En E6 résultat Nb jours en février
En F6 résultat Nb jours en mars
En G6 résultat Nb jours en avril
etc.

Formule pour le calcul du nombre de jour en février :
=SI(FIN.MOIS($B$6;1)>$C$6;$C$6-$B$6-SOMME($D$6:D6)+1;FIN.MOIS($B$6;1)-$B$6-SOMME($D$6:D6)+1)
La première réponse au test sert pour le dernier mois
La deuxième réponse au test, sert pour les mois précédent le dernier mois.
Ainsi la même formule s'adapte en fonction des dates entrées. Ici elle revoie 29.


Pour mars, changer FIN.MOIS($B$6;1) par FIN.MOIS($B$6;2) (ici, renvoie 10)
Pour avril, changer FIN.MOIS($B$6;1) par FIN.MOIS($B$6;3) (ici, renvoie 0)
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
19 mars 2012 à 12:26
bonjour,

Il te faut combiner datdif avec fin.mois pour avoir les résultats.
-1