XL 2019 Première apparition d'une date correspondant à un intervalle de dates dans une liste de dates plus large

terreàterre

XLDnaute Nouveau
Bonjour à tout le monde,
je me lance pour cette première demande d'aide sur ce forum.

Dans une liste de dates non triée, je cherche à récupérer la ligne de la première date inclues elles mème dans une intervalle.

Puisqu'un exemple vaut toujours mille explications, dans le fichier joint, je cherche la ligne de la première apparition d'une date située dans l'intervalle 02/01/20 et 04/02/20

J’espère que certain sauront m'aider, je butte sur la formule depuis un moment maintenant
- j'imagine du INDEX EQUIV mais je n'ai pas trouvé comment y intégrer l'intervalle de dates

Voila pour le petit défi

Merci et bonne journée
 

Pièces jointes

  • Index equiv intervalle.xlsx
    74.3 KB · Affichages: 15
Solution
Bonjour à tous ;),

La fonction Agregat est bien mais difficilement dé-codable à moins d'avoir dans la tête la table des codes fonction dans la tête.

Avec les dates en G4 et H4, deux fonctions matricielles à ne suffiraient elles pas ?
=PETITE.VALEUR(SI((B3:B38>=G4)*(B3:B38<=H4)>0;LIGNE(B3:B38));1) et
=GRANDE.VALEUR(SI((B3:B38>=G4)*(B3:B38<=H4)>0;LIGNE(B3:B38));1)

1591882426291.png

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une solution avec la fonction Agregat (voir l'aide excel sur la fonction).
Pour la première :
=AGREGAT(15;7;LIGNE($B$3:$B$38)/($B$3:$B$38>=DATE(2020;1;2))/($B$3:$B$38<=DATE(2020;1;4));1)

Pour la seconde, seul le premier paramètre change pour 16 (grande.Valeur)

Cordialement
 

Pièces jointes

  • Index equiv intervalle.xlsx
    75.1 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Terreàterre, Roblochon,
Pour ceux qui n'auraient pas XL2019 une solution avec fonctions perso :
VB:
Function PremiereDate(Plage As Range, Date1, Date2)
PremiereDate = ""
For Each c In Plage
    If CDate(c.Value) >= CDate(Date1) And CDate(c.Value) <= CDate(Date2) Then
        PremiereDate = c.Row
        Exit Function
    End If
Next
End Function
Function DerniereDate(Plage As Range, Date1, Date2)
DerniereDate = ""
For Each c In Plage
    If CDate(c.Value) >= CDate(Date1) And CDate(c.Value) <= CDate(Date2) Then
        DerniereDate = c.Row
    End If
Next
End Function
 

Pièces jointes

  • Index equiv intervalle.xlsm
    85.6 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
si le demandeur voulait
la première date au dessus de date1
la première date en dessous de date2
j'aurais utilisé cette logique
VB:
Sub test()
date1 = CDate("01/01/2020")
date2 = CDate("03/01/2020")
MsgBox FindFirstDateAfterDate1([B1:B100], date1, date2)
End Sub


Function FindFirstDateAfterDate1(rng, date1, date2)
Dim x&
For i = 1 To date2 - date1
x = Application.IfError(Application.Match(CStr(CDate(date1) + i), Application.Transpose(rng.Value), 0), 0)
If x <> 0 And x < date2 Then FindFirstDateAfterDate1 = x: Exit For
Next
End Function

'****************************************************************************

Sub test2()
date1 = CDate("01/01/2020")
date2 = CDate("05/01/2020")
MsgBox FindFirstDateBeforeDate2([B1:B100], date1, date2)
End Sub


Function FindFirstDateBeforeDate2(rng, date1, date2)
Dim x&
For i = 1 To date2 - date1
x = Application.IfError(Application.Match(CStr(CDate(date2) - i), Application.Transpose(rng.Value), 0), 0)
If x <> 0 And x < date1 Then FindFirstDateBeforeDate2 = x: Exit For
Next
End Function
utilisable en formule bien sur
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous ;),

La fonction Agregat est bien mais difficilement dé-codable à moins d'avoir dans la tête la table des codes fonction dans la tête.

Avec les dates en G4 et H4, deux fonctions matricielles à ne suffiraient elles pas ?
=PETITE.VALEUR(SI((B3:B38>=G4)*(B3:B38<=H4)>0;LIGNE(B3:B38));1) et
=GRANDE.VALEUR(SI((B3:B38>=G4)*(B3:B38<=H4)>0;LIGNE(B3:B38));1)

1591882426291.png
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

La fonction Agregat est bien mais difficilement dé-codable à moins d'avoir dans la tête la table des codes fonction dans la tête.

A chacun ses goûts.

Les matricielles finissent souvent par dérouter les utilisateurs qui oublient souvent de valider correctement. Sont souvent gourmandes en ressoureces et entraînent des lenteurs.

De plus Agregat

- a été écrite de manière à être plus rapide sur de très grandes plages de données,​
- permet d'éviter les cellules en erreur et ou masquées, filtrées etc.​

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 217
Messages
2 086 352
Membres
103 195
dernier inscrit
martel.jg