Lors de l’élaboration d’une feuille de calcul, vous aurez peut-être besoin de connaître le dernier jour ouvrable d’un mois donné. En supposant que vos jours ouvrables vont du lundi au vendredi, la formule suivante renverra la date souhaitée:

=DATE(YEAR(A1),MONTH(A1)+1,0)-(MAX(0,WEEKDAY (DATE(YEAR(A1),MONTH(A1)+1,0),2)-5))

Cette formule renvoie une date qui est uniquement du lundi au vendredi et toujours le dernier jour du mois représenté par la date en A1. À certaines fins, vous devrez peut-être savoir quel est le dernier vendredi d’un mois donné. Ceci est facilement déterminé avec cette formule:

=DATE(YEAR(A1),MONTH(A1)+1,0)-WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))+(WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))>5)*7-1

Cette formule calcule le dernier jour du mois pour la date dans la cellule A1 et, en fonction de quel jour de la semaine cette date est, soustrait le nombre approprié de jours pour renvoyer le vendredi précédent.

Si vous voulez prendre en compte les vacances d’affaires, alors la complexité de la formule devient assez élevée, assez rapidement. Pour cette raison, il est préférable de créer une fonction définie par l’utilisateur (une macro) qui déterminera le dernier jour ouvrable et compensera les vacances.

La macro suivante renvoie une date, du lundi au vendredi, qui représente le dernier jour ouvrable. La date est comparée à une liste de jours fériés (HolidayList), qui doit être une plage nommée dans votre classeur. S’il s’avère que la date est un jour férié, le jour ouvrable de fin est décrémenté jusqu’à ce qu’un jour approprié soit localisé.

Function LastWorkDay(lRawDate As Long, _     Optional rHolidayList As Range, _     Optional bFriday As Boolean = False) As Long

LastWorkDay = DateSerial(Year(lRawDate), _       Month(lRawDate) + 1, 0) - 0     If bFriday Then         LastWorkDay = MakeItFriday(LastWorkDay)

Else         LastWorkDay = NoWeekends(LastWorkDay)

End If

If Not rHolidayList Is Nothing Then         Do Until myMatch(LastWorkDay, rHolidayList) = 0             LastWorkDay = LastWorkDay - 1             If bFriday Then                 LastWorkDay = MakeItFriday(LastWorkDay)

Else                 LastWorkDay = NoWeekends(LastWorkDay)

End If         Loop     End If End Function
Private Function myMatch(vValue, rng As Range) As Long     myMatch = 0     On Error Resume Next     myMatch = Application.WorksheetFunction _         .Match(vValue, rng, 0)

On Error GoTo 0 End Function
Private Function NoWeekends(lLastDay As Long) As Long     NoWeekends = lLastDay     If Weekday(lLastDay) = vbSunday Then _       NoWeekends = NoWeekends - 2     If Weekday(lLastDay) = vbSaturday Then _       NoWeekends = NoWeekends - 1 End Function
Private Function MakeItFriday(lLastDay As Long) As Long     MakeItFriday = lLastDay     While Weekday(MakeItFriday) <> vbFriday         MakeItFriday = MakeItFriday - 1     Wend End Function

Notez que trois fonctions privées sont incluses. Ces fonctions sont appelées à partir de la fonction principale LastWorkDay. Le premier, myMatch, est un « wrapper » pour la méthode Match régulière. Cette utilisation est incluse en raison de la gestion des erreurs requise.

La deuxième fonction, NoWeekdends, est utilisée pour sauvegarder une date jusqu’au vendredi précédent s’il s’agit simplement d’un samedi ou d’un dimanche. La fonction MakeItFriday est utilisée pour garantir qu’une date sera toujours un vendredi.

Pour utiliser cette fonction définie par l’utilisateur à partir de votre feuille de calcul, vous l’utilisez dans une formule, comme ceci:

=LastWorkDay(A1, HolidayList, TRUE)

Le premier paramètre (A1) est la date à évaluer. Le deuxième paramètre (HolidayList) est une liste facultative de dates de vacances. Comme indiqué ici, il est supposé que HolidayList est une plage nommée dans la feuille de calcul.

Si ce paramètre est fourni, la fonction s’assure que toute date qu’elle renvoie ne figure pas dans la liste des dates dans HolidayList.

Le paramètre final est également facultatif; il peut être VRAI ou FAUX.

(La valeur par défaut, si elle n’est pas spécifiée, est FALSE.) Si ce paramètre est défini sur TRUE, la fonction renvoie toujours le dernier vendredi du mois. Si ce paramètre est TRUE et que HolidayList est fourni, la fonction renvoie le dernier vendredi non férié du mois.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2452) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

lien: / excelribbon-The_Last_Business_Day [Le dernier jour ouvrable].