J'essaie de créer du code VB qui obtiendra le début et la fin du mois précédent
Month(DateValue(Now))
qui reviendrait 3. De là, je peux enlever 1 pour me donner 2 signifiant février. C'est bien, mais qu'en est-il quand je suis en janvier et que je le répète et que cela me donne zéro - mon code va échouer Quelqu'un sait comment obtenir le début et la fin des mois précédents alors?
Merci
Le premier jour du mois précédent est toujours égal à 1; pour obtenir le dernier jour du mois précédent, utilisez 0 avec DateSerial:
''Today is 20/03/2013 in dd/mm/yyyy
DateSerial(Year(Date),Month(Date),0) = 28/02/2013
DateSerial(Year(Date),1,0) = 31/12/2012
Vous pouvez obtenir le premier jour de ce qui précède comme ceci:
LastDay = DateSerial(Year(Date),Month(Date),0)
FirstDay = LastDay-Day(LastDay)+1
Voir aussi: Comment calculer le dernier jour ouvrable du mois dans VBScript
J'ai une formule similaire pour le premier et le dernier jour
Le premier jour du mois
FirstDay = DateSerial(Year(Date),Month(Date),1)
Le jour zéro du mois suivant est le dernier jour du mois
LastDay = DateSerial(Year(Date),Month(Date)+ 1,0)
firstDay = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1)
lastDay = DateAdd("d", -1, DateSerial(Year(Now), Month(Now), 1))
C'est une autre façon de le faire, mais je pense que la version de Remou a l'air plus nette.
Cela fonctionne de manière fiable pour moi dans mon sous-marin principal.
Dim defDate1 As Date, defDate2 As Date
'** Set default date range to previous month
defDate1 = CDate(Month(Now) & "/1/" & Year(Now))
defDate1 = DateAdd("m", -1, defDate1)
defDate2 = DateAdd("d", -1, DateAdd("m", 1, defDate1))
Essayez ceci pour obtenir le mois sous forme numérique:
Month(DateAdd("m", -3, Now))
Cela vous donnera 12
pour décembre.
Donc, dans votre cas, vous utiliseriez Month(DateAdd("m", -1, Now))
pour simplement sous-extraire un mois.
Public Shared Function GetFOMPrev(ByVal tdate As Date) As Date
Return tdate.AddDays(-(tdate.Day - 1))
End Function
Public Shared Function GetEOMPrev(ByVal tdate As Date) As Date
Return tdate.AddDays(-tdate.Day)
End Function
Usage:
'Get End of Month of Previous Month - Pass today's date
EOM = GetEOMPrev(Date.Today)
'Get First of Month of Previous Month - Pass date just calculated
FOM = GetFOMPrev(EOM)
Juste pour ajouter quelque chose à ce que @Fionnuala a dit, les fonctions ci-dessous peuvent être utilisées. Ceux-ci fonctionnent même pendant des années bissextiles.
'If you pass #2016/20/01# you get #2016/31/01#
Public Function GetLastDate(tempDate As Date) As Date
GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function
'If you pass #2016/20/01# you get 31
Public Function GetLastDay(tempDate As Date) As Integer
GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function
Essaye ça
First_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddMonths(-1)
Last_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddDays(-1)