OVH Cloud OVH Cloud

Nombre de jour par mois

20 réponses
Avatar
Carole et Thierry
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de suivi
des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois entre
deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement

10 réponses

1 2
Avatar
Boursicot
Bonjour,
en fait il y a une fonction toute faite pour ce genre de pb c'est fin.mois
la seule chose c'est qu'elle n'est pas activée par défaut il faut l'activer
en chargeant la macro complémentaire utilitaires d'analyse.

le nombre de jours restant à courir en février si b7 est la date initiale
devient

=FIN.MOIS(B7;0)-B7

pour les mois pleins
le nombre de jours en février est

=FIN.MOIS(B7;1)-FIN.MOIS(B7;0)

pour le dernier mois date en c7

Ç-FIN.MOIS(C7;-1)

Après il doit y avoir un moyen de remplir automatiquement un tableau avec
ces valeurs mais ça depend un peu de ce que vous voulez en faire et de la
manière dont il est disposé.

cordialement.



"Carole et Thierry" a écrit dans le
message de news: 415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi

des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre

deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement




Avatar
AV
=FIN.MOIS(B7;0)


Heu.... cette utilisation revient à renvoyer le dernier jour du mois de la date
de B7
Mieux vaut ne pas utiliser les macros complémentaires :

ÚTE(ANNEE(B7);MOIS(B7)+1;0)

PS : ça va quand même pas, loin s'en faut, résoudre la question initiale...
AV

Avatar
Michel Gaboly
Bonjour Carole,

Avec les noms en colonne A, les dates de début et de fin en colonne B et C,
le tout à partir de la ligne 2

1 - Entre en D1 : 1/1/2004

3 - Dans Format, Cellule, choisis personnalisé et entre comme format
"mmmm" (sans les guillemets). Tu obtiens "janvier".

3 - Sélectionne la plage D1:O1

4 - Dans Edition, Recopier, Série... choisis Chronologique et Mois avec
un pas de 1. Cela t'inscris le nom des mois jusqu'à décembre.

5 - En D2, entre cette formule : SI(ET($B2 <= DATE(ANNEE(D$1);
MOIS(D$1) + 1;0);$C2 >= DATE(ANNEE(B$1);MOIS(D$1);1));
DATE(ANNEE(D$1);MOIS(D$1) + 1;1) - $B2;0)

Elle permet de vérifier que l'absence a commencé au plus tard le dernier
jour du mois concerné (en $D1, soit janvier), et ne s'est pas terminée
avant le début du même mois. Si les 2 conditions sont remplies, elle
calcule le nombre de jours d'absense du mois.

Le dernier jour du mois est la veille du premier jour du mois suivant,
ce qui évite un test pour savoir si le mois comporte 28, 29, 30 ou 31
jours. Le premier du mois suivant est obtenu ainsi :

ÚTE(ANNEE(D$1);MOIS(D$1) + 1;1)

La veille est donc

ÚTE(ANNEE(D$1);MOIS(D$1) + 1;1) - 1

ou, + simplement

ÚTE(ANNEE(D$1);MOIS(D$1) + 1;0)

c'est-à-dire le jour 0 du mois suivant.

6 - On peut simplifier grandement la formule et en améliorer la lisibilité
en définissant 2 noms :

DébutMois ÚTE(ANNEE(Feuil1!D$1);MOIS(Feuil1!D$1);1)
FinMois ÚTE(ANNEE(Feuil1!D$1);MOIS(Feuil1!D$1) +1;0)

NB - Attention au caractère "$", qui permet de définir une référence mixte
de façon à ce que le mois varie avec la colonne : une formule en D fait ainsi
référence à janvier et une formule en F fait référence à mars. Pour cela il
est impératif que la cellule active soit en colonne D lors de la définition des
noms. Si ce n'est pas le cas, il faut adapter la formule pour que la lettre
utilisée corresponde à la cellule active : par exemple si la cellule active est
en colonne F, les noms doivent être définis ainsi :

DébutMois ÚTE(ANNEE(Feuil1!F$1);MOIS(Feuil1!F$1);1)
FinMois ÚTE(ANNEE(Feuil1!F$1);MOIS(Feuil1!F$1) +1;0)

7 - Une fois les noms définis, on peut remplacer la formule initiale par :

=SI(ET($B2 <= FinMois;$C2 >= DébutMois);FinMois + 1 - $B2;)

8 - Entre en E2 :

=SI(ET($B2 <= FinMois;$C2 >= DébutMois);MIN(FinMois;$C2) + 1
- MAX(DébutMois;$B2);)

9 - Recopie jusqu'en O2.

10 - Recopie les formules D2:02 jusqu'à la dernière ligne

NB - Il n'est pas indispensable d'avoir des formules spécifiques en colonne D.
Il est possible d'y utiliser la même forule que celle indiquée pour les colonnes
E à 0, légèrement + compliquée.

Voilà, c'est fini, et c'est + rapide à mettre en oeuvre qu'à décrire ;-)))




Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de suivi
des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois entre
deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Boursicot
Rebonjour,

pour distribuer la formule dans un tableau:

mes dates de depart sont dans la colonne b , mes dates de fin dans la
colonne c

je crée une ligne de mois en ligne 6 que je remplis à partir d'une date de
depart en case f4 par
=FIN.MOIS($F$4;0)+1
=FIN.MOIS($F$4;1)+1 etc afin d'avoir les dates de debut de mois dans les
cases

ma formule sur la case par exemple g8 est alors

=SI($C8<G$6;0;SI(ET($B8<G$6;$C8>=G$6;$C8<=FIN.MOIS(G$6;0));$C8-G$6+1;SI(ET($
B8<G$6;$C8>=G$6;$C8>=FIN.MOIS(G$6;0));FIN.MOIS(G$6;0)-FIN.MOIS(G$6;-1);SI(ET
($B8>=G$6;$B8<=FIN.MOIS(G$6;0);$C8>=G$6;$C8<=FIN.MOIS(G$6;0));+$C8-$B8+1;SI(
ET($B8>=G$6;$B8<=FIN.MOIS(G$6;0);$C8>G$6;$C8>=FIN.MOIS(G$6;0));FIN.MOIS(G$6;
0)-$B8+1;SI($B8>FIN.MOIS(G$6;0);0;"erreur"))))))

Bon un peu compliqué mais ça marche très bien et c'est extensible sur une
durée indéterminée. De plus ça doit normalement aller plus vite que le
calcul matriciel sur de gros tableaux.

En fin de tableau , tu peux alors faire le total par mois eventuellement
faire le total pour un employé avec un sommeprod



"Carole et Thierry" a écrit dans le
message de news: 415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi

des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre

deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement




Avatar
Michel Gaboly
Bonjour,

Un peu compliqué, tu dis ;-)))

Il y a heureusement + simple.

Pa ailleurs, je déconseille (ce n'est qu'un avis) l'usage des fonctions supplémentaires de l'utilitaire
d'analyse, pour diverses raisons :

- Si l'utilisateur change de machine ou de version d'Office (.), il rique de mauvaises surprises,
s'il n'est pas conscient que ces fonctions impliquent impliquent la sélection d'une macro
complémentaire. Il risque de se retrouver avec des #NOM! sans comprendre pourquoi.

- S'il envoie le fichier à quelqu'un par mail, même problème.

- Bien souvent une combinaison de fonctions et l'usage des noms permet de se passer des fonctions
de l'utilitaire d'analyse, sans pour autant avoir des formules + lourdes (regarde mon post
précédent).

- Enfin, j'ignore si ces fonctions sont traduites automatiquement si le fichier est ouvert avec une
version d'Excel dans une autre langue que le français. J'ai la flemme de vérifier ;-))



Rebonjour,

pour distribuer la formule dans un tableau:

mes dates de depart sont dans la colonne b , mes dates de fin dans la
colonne c

je crée une ligne de mois en ligne 6 que je remplis à partir d'une date de
depart en case f4 par
=FIN.MOIS($F$4;0)+1
=FIN.MOIS($F$4;1)+1 etc afin d'avoir les dates de debut de mois dans les
cases

ma formule sur la case par exemple g8 est alors

=SI($C8<G$6;0;SI(ET($B8<G$6;$C8>=G$6;$C8<=FIN.MOIS(G$6;0));$C8-G$6+1;SI(ET($
B8<G$6;$C8>=G$6;$C8>=FIN.MOIS(G$6;0));FIN.MOIS(G$6;0)-FIN.MOIS(G$6;-1);SI(ET
($B8>=G$6;$B8<=FIN.MOIS(G$6;0);$C8>=G$6;$C8<=FIN.MOIS(G$6;0));+$C8-$B8+1;SI(
ET($B8>=G$6;$B8<=FIN.MOIS(G$6;0);$C8>G$6;$C8>=FIN.MOIS(G$6;0));FIN.MOIS(G$6;
0)-$B8+1;SI($B8>FIN.MOIS(G$6;0);0;"erreur"))))))

Bon un peu compliqué mais ça marche très bien et c'est extensible sur une
durée indéterminée. De plus ça doit normalement aller plus vite que le
calcul matriciel sur de gros tableaux.

En fin de tableau , tu peux alors faire le total par mois eventuellement
faire le total pour un employé avec un sommeprod

"Carole et Thierry" a écrit dans le
message de news: 415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi

des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre

deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement





--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
Claude Trouet
Dans toutes les propositions faites, il n'est nulle part question des ....
samedi, dimanche, jours fériés.
Faut-il les prendre en compte ? Si j'ose un avis, je pense que OUI
Qu'en pensez-vous ?

"Carole et Thierry" a écrit dans le
message de news: 415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi
des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre
deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement




Avatar
AV
Dans toutes les propositions faites, il n'est nulle part question des ....
samedi, dimanche, jours fériés.
** Pourquoi en serait-il spécialement question puisque ce sont des jours comme

les autres (s'ils sont inclus dans l'arrêt de travail)

Faut-il les prendre en compte ?
** C'est fait !


AV

Avatar
yannick bonneaux
avec thierry la douche???

"Carole et Thierry" a écrit dans le
message de news:415e38e4$0$8338$
Bonjour,

Merci a tous pour vos bon conseils, la nuit a été productive :>)

Je vais prendre une bonne douche pour me réveiller et j'attaque.

Je vous tiens au courant mais déjà MERCI vous êtes supers....

Carole
"docm" a écrit dans le message de
news:
Bonjour.

Si tu aimerais une petite routine macrotique, je te propose ce qui suit



adapter et compléter):

Sub RepartirAbsenceParMois()

Sheets("feuil1").Select
colonnedatedepart = Range("B1").Column
colonnedatefin = Range("C1").Column

premiereligne = 1
derniereligne = 10
For i = premiereligne To derniereligne

datedepart = Cells(i, colonnedatedepart).Value
datefin = Cells(i, colonnedatefin).Value

If datedepart <> "" And datefin <> "" Then

colonneresultat = colonnedatefin + 1
Cells(i, colonneresultat) = "Erreur"

a = datedepart
While a <= datefin

annee = Year(a)
mois = Month(a)

premierjourmoissuivant = DateSerial(annee, mois + 1, 1)

If premierjourmoissuivant > datefin Then
premierjourmoissuivant = datefin + 1
End If

nombredejours = DateDiff("d", a, premierjourmoissuivant)

Cells(i, colonneresultat) = nombredejours
Cells(i, colonneresultat + 1) = ""
colonneresultat = colonneresultat + 1

a = premierjourmoissuivant

Wend

End If

Next

End Sub

Salutations.

"Carole et Thierry" wrote in
message news:415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi

des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre
de



jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de
jour



arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre

deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15
en



mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois
cumuler


toutes les absences.

Merci beaucoup pour votre aide.

Cordialement












Avatar
Jacky
Oui, mais comme
la nuit a été productive
Il n'est plus en état, le pauvre.


;o)))
JJ

"yannick bonneaux" a écrit dans le message de
news:415eb792$0$26116$
avec thierry la douche???

"Carole et Thierry" a écrit dans
le

message de news:415e38e4$0$8338$
Bonjour,

Merci a tous pour vos bon conseils, la nuit a été productive :>)

Je vais prendre une bonne douche pour me réveiller et j'attaque.

Je vous tiens au courant mais déjà MERCI vous êtes supers....

Carole
"docm" a écrit dans le message de
news:
Bonjour.

Si tu aimerais une petite routine macrotique, je te propose ce qui
suit




adapter et compléter):

Sub RepartirAbsenceParMois()

Sheets("feuil1").Select
colonnedatedepart = Range("B1").Column
colonnedatefin = Range("C1").Column

premiereligne = 1
derniereligne = 10
For i = premiereligne To derniereligne

datedepart = Cells(i, colonnedatedepart).Value
datefin = Cells(i, colonnedatefin).Value

If datedepart <> "" And datefin <> "" Then

colonneresultat = colonnedatefin + 1
Cells(i, colonneresultat) = "Erreur"

a = datedepart
While a <= datefin

annee = Year(a)
mois = Month(a)

premierjourmoissuivant = DateSerial(annee, mois + 1, 1)

If premierjourmoissuivant > datefin Then
premierjourmoissuivant = datefin + 1
End If

nombredejours = DateDiff("d", a, premierjourmoissuivant)

Cells(i, colonneresultat) = nombredejours
Cells(i, colonneresultat + 1) = ""
colonneresultat = colonneresultat + 1

a = premierjourmoissuivant

Wend

End If

Next

End Sub

Salutations.

"Carole et Thierry" wrote in
message news:415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau
de




suivi
des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin
Nombre




de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de
jour



arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par
mois




entre
deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et
15




en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois
cumuler


toutes les absences.

Merci beaucoup pour votre aide.

Cordialement
















Avatar
Boursicot
Bonjour,

dsl encore moi pour une autre solution.

tu recopies dans un module de macro la fonction personnalisée suivante :

Function nbjours(datedeb, datefin, datemois)
Application.Volatile True
debutmois = DateSerial(Year(datemois), Month(datemois), 1)
finmois = DateSerial(Year(datemois), Month(datemois) + 1, 0)


If ((datefin < debutmois) Or (datedeb > finmois)) Then
nbjours = 0

ElseIf ((datedeb <= debutmois) And (datefin >= debutmois) And (datefin < finmois)) Then
nbjours = datefin - debutmois + 1

ElseIf ((datedeb <= debutmois) And (datefin >= finmois)) Then
nbjours = finmois - debutmois + 1

ElseIf ((datedeb >= debutmois) And (datedeb <= finmois) And (datefin > debutmois) And (datefin <= finmois)) Then
nbjours = datefin - datedeb + 1

ElseIf ((datedeb >= debutmois) And (datedeb <= finmois) And (datefin > finmois)) Then
nbjours = finmois - datedeb + 1
End If


End Function


Ensuite tu n'as plus qu'à utiliser dans ton classeur la fonction
personnalisée nbjours comme une fonction normale avec pour arguments la date
de debut, la date de fin, et une date du mois ou tu veux avoir le resultat..


"Carole et Thierry" a écrit dans le
message de news: 415dcafc$0$8336$
Bonjour,

Dans le cadre de mes activités professionnelles, je gère un tableau de
suivi

des arrêts maladie.

il se pressente sous la forme :

Nom Date début arrêt Date de fin Nombre de
jour arrêt.

Mon "boss" me demande maintenant de faire une synthèse du nombre de jour
arrêt mois par mois.

J'ai donc besoin de savoir comment calculer le nombre de jour par mois
entre

deux dates.

Par exemple:

si mon arrêt va du 15 janvier au 15 mars,

Le résultat devrait être : 15 jours en janvier, 28 en février, et 15 en
mars.

Bien sur mon tableau fait plusieurs centaine de lignes et je dois cumuler
toutes les absences.

Merci beaucoup pour votre aide.

Cordialement




1 2