Rechercher la valeur <= la plus proche avec condition

Bonjour à tous,

Contexte:

J'ai un tableau nommé "calendrier" qui comprend deux colonnes. La colonne "Date" qui comprend la date de tout les jours de l'année, et la colonne "Ouvert" qui indique si le jour est ouvert ou fermé par "oui" et "non"

Problème:

Je souhaite rechercher la date égale ou inférieure à la date d'aujourd'hui dans la colonne "Date" avec la condition d'avoir "oui" dans la colonne "Ouvert".

Question:

Comment articuler cela avec des fonctions Excel et avec VBA?

D'avance merci pour vos contributions.

Cordialement

Bonjour,

Un fichier exemple est toujours plus parlant..

@ + +

161pdm.xlsx (10.33 Ko)

Bonjour R@chid,

Je reste sans voix.

J'avoue que les calculs matriciel est un domaine qui me reste à découvrir .

C'est bien une matrice que tu as développé, n'est ce pas?

{=MAX(SI((Table_Calendrier[Date]<=AUJOURDHUI())*(Table_Calendrier[Ouvert]="Oui");Table_Calendrier[Date]))}

C'est exactement ce que je voulais faire, et je n'aurai jamais imaginé qu'on puisse le faire ainsi.

Concernant VBA, comment tu écrit la formule?

En effet je teste cette condition à l'ouverture de mon fichier avec une macro.

D'avance merci.

Bonjour,

Oui c'est une formule matricielle...

Pour le VBA peut être une âme charitable va passer par la pour t'aider.

@ + +

Bonjour

Bonjour R@chid

Je fais la partie facile

Sub Macro1()
Dim NbLg As Long
  NbLg = Range("A" & Rows.Count).End(xlUp).Row
    Range("H2").FormulaArray = _
        "=MAX(IF((A2:A" & NbLg & "<=TODAY())*(B2:B" & NbLg & "=""Oui""),A2:A" & NbLg & "))"
End Sub

Bonjour Banzai64,

Merci pour ta réponse. Je dois néanmoins clarifier ma demande afin que tu comprenne mieux mon problème.

A l'ouverture de mon fichier je teste si la "Table_Date" est à jour par le biais d'une macro.

Pour cela je vérifie que le max de la "Table_Date" corresponde au dernier jour ouvert <= à aujourd'hui de la "Table_Calendrier"

MAX(Table_Date[Date])={MAX(SI((Table_Calendrier[Date]<=AUJOURDHUI())*(Table_Calendrier[Ouvert]="Oui");Table_Calendrier[Date]))}

Si la condition n'est pas remplie alors je lance une macro de mise à jour de "Table_Date".

Avec VBA je sais retranscrire les fonctions Max et Si. Mais dans le cadre d'une matrice je ne sais pas.

Tu as une idée sur ce point?

D'avance merci

Bonsoir

pdm a écrit :

Tu as une idée sur ce point?

Pas trop d'idée sur ce point

Mais en cherchant j'ai lu qu'avec Evaluate tout est traité en matricielle

Donc

Sub Macro2()
Dim NbLg As Long
Dim Ladate As Date

  NbLg = Range("A" & Rows.Count).End(xlUp).Row
  Ladate = Evaluate("MAX(IF((A2:A" & NbLg & "<=TODAY())*(B2:B" & NbLg & "=""Oui""),A2:A" & NbLg & "))")
  Debug.Print Ladate
End Sub

Plus besoin de passer par une cellule, la variable LaDate contiendra ce que tu recherches

Bonjour Banzai64,

Merci pour ta suggestion, c'est exactement ce que je voulais, cela va me permettre de mettre en place mon contrôle d'ouverture .

Cordialement

Rechercher des sujets similaires à "rechercher valeur proche condition"