Harold essaie de concevoir une formule qui lui dira les cinq dernières années au cours desquelles une date particulière (disons le 10 mai) s’est produite un jour particulier de la semaine (disons jeudi).

Il existe plusieurs façons de déterminer ces informations. Un moyen simple consiste, dans une nouvelle feuille de calcul, à entrer la date que vous souhaitez tester (par exemple, 10/05/18) dans la cellule A1. Juste en dessous, dans la cellule A2, entrez une date un an plus tôt: 10/05/17. Sélectionnez ces deux cellules et faites glisser la poignée de remplissage vers le bas pour le nombre de cellules souhaité, et vous vous retrouvez avec une colonne contenant la date du 10 mai sur les années décroissantes.

Ensuite, dans la cellule B1, entrez la formule suivante:

=WEEKDAY(A1)

Copiez cette formule pour autant de lignes que de dates dans la colonne A.

Cela renvoie une valeur, 1 à 7, représentant le jour de la semaine pour les dates de la colonne A. Puisque 1 = dimanche, 2 = lundi, etc., cela signifie que toute valeur de 5 représenterait un jeudi. Ainsi, vous pouvez placer cette formule dans la cellule C1 et la copier:

=IF(B1=5,YEAR(A1),"")

Ceci « appelle » les années au cours desquelles la date dans la colonne A est un jeudi.

Vous pouvez, si vous préférez, simplement renoncer à ajouter la colonne C et, à la place, utiliser le filtrage pour n’afficher que les dates où la valeur de la colonne B est 5 (jeudi).

Vous pouvez également utiliser une formule matricielle pour trouver les informations souhaitées.

Tout d’abord, sélectionnez cinq cellules dans la colonne de votre choix. Ensuite, tapez ce qui suit dans la barre de formule:

=LARGE((WEEKDAY(DATE(ROW(1918:2018),5,10))=5)*ROW(1918:2018),ROW(1:5))

Entrez la formule en appuyant sur Ctrl + Maj + Entrée. Le résultat est que les cinq cellules contiendront les cinq dernières années au cours desquelles le 10 mai était un jeudi. Vous pouvez rendre la formule plus polyvalente en remplaçant les éléments clés par des plages nommées, de cette manière:

=LARGE((WEEKDAY(DATE(ROW(1918:2018),MO,DA))=DW)*ROW(1918:2018),ROW(1:5))

Il ne vous reste plus qu’à créer les plages nommées MO (mois), DA (jour) et DW (jour de la semaine). Lorsque vous modifiez les valeurs de ces plages nommées, la formule matricielle met à jour les cinq cellules pour refléter les années souhaitées.

Une troisième façon de trouver les informations consiste à créer une macro qui demande une date de début et un jour de la semaine. La macro peut alors reculer d’une année à la fois jusqu’à ce qu’elle attrape cinq années qui répondent aux critères.

Sub CalcDates()

Dim sTemp As String     Dim dBegin As Date     Dim dWork As Date     Dim J As Integer     Dim iDoW As Integer     Dim iYears(5) As Integer

sTemp = InputBox("Beginning Date?")

dBegin = CDate(sTemp)

If dBegin > 0 Then         sTemp = InputBox("Day of Week?")

sTemp = LCase(Trim(sTemp))

iDoW = 0         For J = 1 To 7             If sTemp = LCase(WeekdayName(J)) Then iDoW = J         Next J         If iDoW > 0 Then             dWork = dBegin             J = 0             While J < 5                 If Weekday(dWork) = iDoW Then                     J = J + 1                     iYears(J) = Year(dWork)

End If                 dWork = DateAdd("yyyy", -1, dWork)

Wend

sTemp = "These are the previous five years in which "

sTemp = sTemp & MonthName(Month(dBegin)) & " " & Day(dBegin)

sTemp = sTemp & " falls on a " & WeekdayName(iDoW) & ":"

sTemp = sTemp & vbCrLf & vbCrLf             For J = 5 To 1 Step -1                 sTemp = sTemp & iYears(J) & vbCrLf             Next J             MsgBox sTemp         End If     End If End Sub

Lorsque la macro trouve les cinq années, elle les affiche dans une boîte de message.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13529) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.