Comptage des fins de mois (Microsoft Excel)
Kim a une feuille de calcul dans laquelle elle place une date de début (colonne C) et une date de fin (colonne D). Elle a besoin d’un moyen de calculer le nombre de fins de mois entre les deux dates. Par exemple, si la date de début est le 1/1/17 et la date de fin est le 31/07/17, le nombre de mois se termine est 7. Si, cependant, la date de fin est le 30/07/17, le nombre de mois se termine est 6.
Il existe un certain nombre de formules que vous pouvez concevoir pour calculer le nombre approprié. La formule la plus simple est de savoir si vous pouvez toujours compter sur la date dans la colonne C étant le début d’un mois. Dans ce cas, la formule suivante fonctionnera très bien:
=DATEDIF(C1,D1+1,"m")
Si vous ne pouvez pas compter sur la colonne C contenant une date qui est le début d’un mois, mais que vous pouvez compter sur les dates de début et de fin toujours dans la même année, alors l’une des formules suivantes fera l’affaire:
=IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-MONTH(C1),MONTH(D1)-MONTH(C1)+1) =IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(EOMONTH(D1,0))-MONTH(EOMONTH(C1,0))+(EOMONTH(D1,0)=D1) =IF(EOMONTH(D1,0)=D1,MONTH(D1)-MONTH(C1)+1,MONTH(D1)-MONTH(C1)) =IF(D1<EOMONTH(D1,0),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(D1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0)
Si les années aux dates de début et de fin peuvent être différentes, les formules sont un peu plus complexes. Chacune des variations suivantes calculera le nombre correct de fins de mois dans la plage de dates:
=12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+INT(D1=EOMONTH(D1,0)) =12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+IF(EOMONTH(D1,0)=D1,1,0) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(D1=EOMONTH(D1,0)) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(DAY(D1+1)=1) =MONTH(D1)+12YEAR(D1)-MONTH(C1)-12YEAR(C1)+IF(EOMONTH(D1,0)=D1,1,0) =(MONTH(D1+1)+12YEAR(D1+1))-(MONTH(C1)+12YEAR(C1)) =IF(D1=EOMONTH(D1,0),1,0)+MONTH(D1)-MONTH(C1)+((YEAR(D1)-YEAR(C1))*12) =IF(EOMONTH(D1,0)=D1,(MONTH(D1)-MONTH(C1)+1)+(YEAR(D1)-YEAR(C1))12,MONTH(D1)-MONTH(C1)+(YEAR(D1)-YEAR(C1))12) =IF(D1=EOMONTH(D1,0),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m"),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m")-1) =IF(D1<C1,"Error",MONTH(D1)-MONTH(C1)+IF(D1MONTH(D1+1))*1) =IF(D1<C1,"Error",(YEAR(D1)-YEAR(C1))*12+(MONTH(D1)-MONTH(C1))+(EOMONTH(D1,0)=D1)) =SUM(N(FREQUENCY(EOMONTH(ROW(INDIRECT(C1&":"&D1)),0),EOMONTH(ROW(INDIRECT(C1&":"&D1)),0))>0))-(D1<EOMONTH(D1,0))
Certaines de ces formules sont un peu longues, vous voudrez donc surveiller attentivement que vous les obtenez toutes si vous choisissez d’en utiliser une.
Si vous préférez utiliser une approche macro, la fonction suivante définie par l’utilisateur peut être intéressante:
Function CountMonthEnds(sd As Date, ed As Date) As Integer Dim ceom As Integer Dim cmonth As Integer Dim lmonth As Integer Dim x As Date cmonth = 0 ceom = 0 cmonth = Month(sd) lmonth = cmonth ' go to end date + 1 to allow for end date being end of month For x = sd To ed + 1 cmonth = Month(x) If cmonth <> lmonth Then ceom = ceom + 1 lmonth = cmonth End If Next x CountMonthEnds = ceom End Function
La macro parcourt simplement toutes les dates entre les dates de début et de fin. Il regarde le mois pour chacune des dates, et s’il change, il le compte comme une «fin de mois». Ce décompte est renvoyé par la fonction.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (572) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.