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
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
A voir également:
- Nombre de jour entre deux dates excel
- Liste déroulante excel - Guide
- Si et excel - Guide
- Concatener deux cellules excel - Guide
- Aller à la ligne excel - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
8 réponses
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
19 mars 2012 à 12:31
19 mars 2012 à 12:31
Bonjour,
Pour du VBA:
'd pour jour
x = DateDiff("d", "22/02/2012", "15/03/2012")
Bonne suite
Pour du VBA:
'd pour jour
x = DateDiff("d", "22/02/2012", "15/03/2012")
Bonne suite
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 19/03/2012 à 12:33
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
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
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.
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.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 20/03/2012 à 12:15
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.
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.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 mars 2012 à 16:42
20 mars 2012 à 16:42
pièce jointe illisible car format Xl2007
POURTANT JE L'AVAIS PRÉCISÉ EN GRAs
abandon du suivi
POURTANT JE L'AVAIS PRÉCISÉ EN GRAs
abandon du suivi
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.
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.
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 mars 2012 à 13:28
20 mars 2012 à 13:28
t'es pas obligé de tenir compte de mes indications pour joindre un fichier...
Ciao
Ciao
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,
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,
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
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)
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)
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 704
19 mars 2012 à 12:26
19 mars 2012 à 12:26
bonjour,
Il te faut combiner datdif avec fin.mois pour avoir les résultats.
Il te faut combiner datdif avec fin.mois pour avoir les résultats.