Excel : Nombre de jours entre deux dates

Résolu
maloplekxus -  
Marco9233 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Pour du VBA:

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

Bonne suite
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
maloplekxus
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
pièce jointe illisible car format Xl2007

POURTANT JE L'AVAIS PRÉCISÉ EN GRAs

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

Dsl pour mon inattention par rapport au format attendu

Cordialement,
0
maloplekxus
 
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
maloplekxus
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
t'es pas obligé de tenir compte de mes indications pour joindre un fichier...

Ciao
0
maloplekxus
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   4 724
 
bonjour,

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