Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul d'un écart de date (Correctif de formule SVP)

74 réponses
Avatar
Guido
Bonjour =E0 vous tous,

un petit soucis de formule de d=E9compte de dates. Qui peut m'apporter une =
solution.

=3DSI(JOUR(A1)=3D1;30;FIN.MOIS(A1;0)-A1+1)+SI(FIN.MOIS(B1;0)=3DB1;30;JOUR(B=
1))+JOURS360(FIN.MOIS(A1;0);FIN.MOIS(B1;0))-30

Cette formule devrait me donner les r=E9sultats suivants en fonction d'une =
simple r=E8gle commerciale de 30 jours, mais qui devrait calculer le mois d=
e f=E9vrier selon son nombre exacte de jours (soit 28 jours, soit 29 jours)=
.

01.01.2010 27.01.2010 27 jours
01.02.2010 27.02.2010 27 jours
01.02.2010 28.02.2010 28 jours
01.02.2012 29.02.2012 29 jours
04.05.2010 31.05.2010 28 jours
01.06.2010 30.06.2010 30 jours
01.07.2010 31.08.2010 60 jours
01.09.2010 30.09.2010 30 jours
04.05.2010 02.08.2010 90 jours
15.05.2010 19.11.2010 186 jours


j'ai par exemple un soucis avec le 2=E8me exemple. Il ne compte que 25 jour=
s sur le mois de f=E9vrier. Sinon tout le reste semble correspondre.

Qui saurait m'aider, dans la mise au point de cette formules pseudo commerc=
iale ??

Guido

10 réponses

Avatar
Jacquouille
j'aime ton analyse: c'est imbuvable, mais si le sirop fait son effet
.....buvons-en un coup. -))
Perso, je vais m'en tenir à cela et passer à un autre message.
A bientôt et merci
PS : Coucou Isa la belle


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmjod2$iui$

Cette formule devrait s'appliquer dans tous les cas de figure...

Reste à traduire les fonctions en français.

=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));DATEDIF(A1;B1;"d")+1;
IF(MONTH(A1)=MONTH(B1);(ABS(DAY(B1)-DAY(A1))+1)+((DATEDIF(A1;B1;"M"))*30);
IF(DAY(A1)>DAY(B1);MAX(0;((DATEDIF(A1;B1;"M")-1)*30));MAX(0;
((DATEDIF(A1;B1;"M")-1)*30)))+(30-MIN(IF(DAY(A1)>0;30;DAY(A1)-1);30))
+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30)))

Pour Jacquouille, elle a 315 caractères. Ce type de formule est imbuvable,
mais si elle
remplit son mandat, elle a l'avantage de ne pas utiliser les fonctions de
l'utilitaire
d'analyse
donc plus flexible entre les différentes versions d'Excel 1997 à 2010.
--
MichD
---------------------------------------------------------------
Avatar
Guido
Bonsoir à vous tous

Désolé pour mon retard concernant le retour et feedback des dernières formules.

http://cjoint.com/?3Dsw5ee5QLy

Je vous transmets un lien (valide 4 jours) afin de vous présenter mes tes ts et les calculs en fonction de ce qu'il devrait ressortir selon chaque p ériodes.

Vous remarquerez que les écarts de calculs se produisent généralement en rapport avec le mois de février.

Il est également très rare que je doive effectuer un calcul d'écart q ui devra dépasser 180 jours, mais le chevauchement de deux années se fa it couramment.

Vous remarquerez qu'il y a quelques petits trolls dans les calculs (ex: -24 ).
Et je n'ai pas abuser de Cervoise tiède Maître Jacquouile.

Grand merci MichD
Avatar
MichD
Retour de ton fichier : http://cjoint.com/?BDta20o6KG8

Regarde dans le bas de celui-ci, j'y ai fait mes remarques.



--
MichD
---------------------------------------------------------------
Avatar
Guido
MichD

Je te présente mon Big Méaculpa pour la ligne 27. Désolé pour cette erreur.

Suite à ton message, j'ai revu mes explications et tu trouveras des minis explicatifs de comment je calcule ces différences.

http://cjoint.com/?3DtnWWPiOFZ

Je suis vraiment navré que mes explicatifs n'étaient pas si clair. Je p ensais que ce calcul était simple. Et réitère ma demande d'excuses.

Je m'étais trompés de doigts lors de ce calcul. ;-0)))

Pourrais-tu jeter un œil sur la *Version 3 ? J'y ai également placé d es explicatifs.
Avatar
Jacquouille
Mon Bon Denis
Je suis conscient de l'état de surexcitation de tes neurones lorsque l'on
change les règles à tout bout de champs.
Mais, ce qui m'interpelle, c'est ta ligne 55 : --> mois de janvier 4
jours calcule le 1 et le 3 janvier ?????
En comptant les bornes .....
1er janvier = 1 j
2 janv = 2 j
3 janv = 3 j

Comment tu arrives à 4 ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmngpm$hmb$

Retour de ton fichier : http://cjoint.com/?BDta20o6KG8

Regarde dans le bas de celui-ci, j'y ai fait mes remarques.



--
MichD
---------------------------------------------------------------
Avatar
Jacquouille
Allah ligne 54, décembre est compté pour 31 jours ......
In fine , ta base de réflexion est pire que celle des Romains d'il y a 2000
ans..... -((
Je fais comme Denis, je cède la place.
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Guido" a écrit dans le message de groupe de discussion :


MichD

Je te présente mon Big Méaculpa pour la ligne 27. Désolé pour cette erreur.

Suite à ton message, j'ai revu mes explications et tu trouveras des minis
explicatifs de comment je calcule ces différences.

http://cjoint.com/?3DtnWWPiOFZ

Je suis vraiment navré que mes explicatifs n'étaient pas si clair. Je
pensais que ce calcul était simple. Et réitère ma demande d'excuses.

Je m'étais trompés de doigts lors de ce calcul. ;-0)))

Pourrais-tu jeter un œil sur la *Version 3 ? J'y ai également placé des
explicatifs.
Avatar
isabelle
bonjour Guido,

qu'est ce qui détermine que des fois tu comptes le premier jour et des fois tu ne le comptes pas

exemple:

ici le premier jour est compté

2010-05-15 2010-11-19
Mois de mai : 17 jours calcule le 15 et le 31 mai dans le décompte ---> OK


ici le premier jour n'est pas compté
2010-01-01 2010-02-03

Mois de janvier : 30 jours calcule le 1 et le 31 janvier (soit total 30 jours) ---> ??? (31)



Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 2 Then
For i = 1 To x - 1
If m1 = Month([a]) + i = 2 Then
fm = Evaluate("Day(FIN.MOIS(" & DateSerial(Year([a]), Month([a]) + i, 1) & ", 0))")
w = w + fm
Else
w = w + 30
End If
Next
w = w + ja + jb
ElseIf Month([a]) = Month([b]) Then
w = Day([b]) - Day([a]) + 1
Else
w = ja + jb
End If

DateDifCommercial = w
End Function


--
isabelle



Le 2012-04-19 07:55, Guido a écrit :
MichD

Je te présente mon Big Méaculpa pour la ligne 27. Désolé pour cette erreur.

Suite à ton message, j'ai revu mes explications et tu trouveras des minis explicatifs de comment je calcule ces différences.

http://cjoint.com/?3DtnWWPiOFZ

Je suis vraiment navré que mes explicatifs n'étaient pas si clair. Je pensais que ce calcul était simple. Et réitère ma demande d'excuses.

Je m'étais trompés de doigts lors de ce calcul. ;-0)))

Pourrais-tu jeter un œil sur la *Version 3 ? J'y ai également placé des explicatifs.
Avatar
isabelle
correction,

Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 1 Then
For i = 1 To NbMois - 1
If m1 = Month([a]) + i = 2 Then
fm = Evaluate("Day(FIN.MOIS(" & DateSerial(Year([a]), Month([a]) + i, 1) & ", 0))")
w = w + fm
Else
w = w + 30
End If
Next
w = w + ja + jb
ElseIf Month([a]) = Month([b]) Then
w = Day([b]) - Day([a]) + 1
Else
w = ja + jb
End If

DateDifCommercial = w
End Function


--
isabelle
Avatar
isabelle
jamais 2 sans 3,

Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 1 Then
For i = 1 To NbMois - 1
If Month(DateSerial(Year([a]), Month([a]) + i, 1)) = 2 Then
fm = Day(DateSerial(Year([a]), Month([a]) + i + 1, 1) - 1)
w = w + fm
Else
w = w + 30
End If
Next
w = w + ja + jb

ElseIf Month([a]) = Month([b]) Then
w = Day([b]) - Day([a]) + 1
Else
w = ja + jb
End If

DateDifCommercial = w
End Function


--
isabelle
Avatar
Guido
Bonsoir à vous tous,

comme énoncé dans la feuille de calcul, je me rends maintenant compte q ue mes explicatifs du début ont été très contraignantes. Milles exc uses. Travaillant avec cette méthode de calcul tous les jours, je pensais que c'était simple pour tout le monde.

Pour répondre à Isabelle,

- il ne m'est pas permis de compter un mois complet de plus de 30 jours.

- les mois entamés doivent obligatoirement comptabiliser le nombre de jou rs entre le premier jour de présence et le dernier jours du même mois e ntamé. De même pour le mois de fin de présence, du premier jour du mo is au dernier jour du mois entamé (ce qui implique une complication puisq ue les mois entamés utilisent leurs nombres de jours exactes).

Alors, j'essaie de résumé la méthode de calcul comme ceci:

- le nombre de jour sur un mois complet est dénombré sur 30 jours
- l’exception à cette règle est le mois de février qui doit obligat oirement se calculer sur le nombre exact de jour dans son mois en fonction de l'année (28/29).

- Ce qui implique, les mois complets sont comptabilisé sur un nombre de j ours maximum de 30, sauf février.

Concernant les mois entamés (même si c'est du 02 au 31)

- les mois entamés, comme montré dans la feuille de calcul, sont compt és mensuellement avec leurs jours exactes de présence. Je prendrai exem ple sur le calcul de la date de la fameuse ligne 54 (pour faire plaisir à Jacquouille.

25.12.2011 - 03.01.2012 = 10 jours, pourqoi ....

parce que ...
- Mois de décembre = 7 jours de présence calculé du 25 au 31 déce mbre
- Mois de janvier = 3 jours de présence calculé du 1 au 3 janvier
(et la je présente à nouveau mon Mea Culpa à Denis pour mon erreur qu i lui a attribué quelques cheveux blancs)

Pour l'exemple suivant :

19.11.2011 - 03.03.2012 = 104, pourquoi...

Mois de novembre = 12 jours de présence calculé du 19 au 30 novembre
Mois de mars = 3 jours de présence calculé du 1 au 3 février
Mois complet de février = 29 jours de présence (car comptabilisé 29 jours en 2012)
Mois complets entre les 2 dates = 60 jours de présences (2x30 jours max .) pour décembre et janvier.

Voici comment je dois calculer les présences...

Je suis désolé Isabelle, les macros au boulot sont purement interdite e t la procédure pour en faire accepter une est super *%&")%&+@#$ grrrr . D 'où mon intérêt pour les formules. Merci tout de même. Je la prendr ai pour mon usage personnel se qui me permettra (si j'arrive) à entamer m a formation un peu plus poussée que ce que je connais en VBA.

Bonne soirée à vous tous