Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Excel] equiv() avec date supérieure

7 views
Skip to first unread message

LaurentC

unread,
Apr 26, 2022, 6:33:20 AM4/26/22
to
Bonjour à tous

Dans ma feuille j'ai un tableau structuré nommé "Tableau" avec
plusieurs colonnes dont une nommée "LaDate".
Dans cette colonne, j'ai des dates classées par ordre croissant qui ne
se suivent pas nécessairement et parfois espacées de cellule vide.

Sur cette feuille en K17 j'ai une date au format date (*14/03/2012), la
colonne du tableau a le même format.

En K18 j'aimerai renvoyer le numéro d'ordre dans la série
Tableau[LaDate] de ma date inscrite en K17 voir la date supérieure si
cette date n'est pas dans la liste.

La formule =EQUIV(K17;Tableau[LaDate];0) me renvoie bien le résultat
attendu si la date recherchée est dans la liste ... mais parfois elle
n'y est pas :-(

La formule suivante me renvoie #N/A (avec -1 pour avoir une date
postérieure)
=EQUIV(K17;Tableau[LaDate];-1)

Pourquoi ?

Alors que
=EQUIV(K17;Tableau[LaDate];1) fonctionne mais donne la date antérieure

Je but final est de faire ça en VBA, mais je n'y arrive pas non plus
avec Application.Match ... j'ai essayé xlookup sans plus de succès :-(

Pouvez vous m'aider ?
Paravance merci
@+Laurent

MichD

unread,
Apr 26, 2022, 7:14:28 AM4/26/22
to
Le 26/04/22 à 06:33, LaurentC a écrit :
Bonjour,

Avec le paramètre -1, la plage de tes dates doit être en ordre
décroissant et avec 1, en ordre croissant.
Saisis =Equiv dans une cellule et appuie sur la touche F1 pour accéder à
l'aide de cette fonction dans Excel.

Je te propose 2 formules matricielles, la validation est effectuée par
Maj + Ctrl + Enter

Si tu veux avoir la date comme résultat :
A1:A12 -> plage des dates
D1 -> la date recherchée

=MIN(SI(A1:A12>D1;A1:A12))

Si tu veux obtenir le numéro de la ligne où se retrouve la date
recherchée: (cellule au format numérique)
=EQUIV(MIN(SI(A1:A12>D1;A1:A12));A1:A12;0)

Évidemment la date recherchée doit exister sinon pour éviter un
affichage "#N/A!, tu utilises la formule :

=SIERREUR(EQUIV(MIN(SI(A1:A12>D1;A1:A12));A1:A12;0);"")
La validation en matricielle.

MichD

MichD

unread,
Apr 26, 2022, 7:46:09 AM4/26/22
to
Le 26/04/22 à 07:14, MichD a écrit :
Si tu as des cellules vides et que tu veuilles obtenir la position de la
valeur recherchée, tu peux utiliser ceci :

Validation matricielle :
=RANG(MIN(SI(A1:A10>D1;A1:A10));A1:A10;1)

MichD

LaurentC

unread,
Apr 26, 2022, 9:19:15 AM4/26/22
to
Bonjour MichD
 
> ... dates doit être en ordre décroissant ...
 
Voilà le truc qui m'a planté, j'étais persuadé que c'était l'inverse !
 
Merci pour ton aide mais il faut se rendre à l'évidence, mon niveau VBA n'est pas suffisant pour faire ce que je veux faire ... :-(
 
Je vais essayer d'être clair dans mes explications ...
Il s'agit de gérer des plages de date fonction de jours non travaillés.
 
J'ai un tableau de date comme ci dessous, dans une Sub existante j'ai une variable connue avec une date (DateCherchée) et j'ai besoin de renvoyer 2 dates (JourDébut et JourFin) avec les conditions suivantes
 
un exemple avec DateCherchée ="25/01/2020":
 
- les dates acceptables pour JourDébut et JourFin sont uniquement des jours de la semaine du lundi au vendredi
- JourDébut = la date précédente ou égale présente dans le tableau + 1 jour (ici le 21/01/2020)
- JourFin = le jour ouvré précédent la date suivante dans la liste (ici le 09/04/2020)
 
=> donc les dates de la liste ne sont jamais renvoyées pour JourDébut et Jourfin
 
LaDate
mer 01/01/2020
lun 20/01/2020
ven 10/04/2020
lun 13/04/2020
ven 01/05/2020
lun 31/08/2020
 
autre exemple
DateCherchée =01/01/2020
JourDébut = 02/01/2020
JourFin =17/01/2020 (le 19/01 est un dimanche et le 18/01 est un samedi donc le vendredi 17)
 
La ou mes différents essais flanchent c'est par exemple pour "DateCherchée = ven 10/04/2020"
JourDébut devrait être le 11/04 mais c'est un samedi, le 12 un dimanche et le 13/01 qui est une date de la liste, donc JourDébut  = 13/04/2020 et JourFin=28/08/2020
 
Idéalement j'aurai aimé une function() mais je crois qu'une function ne peut renvoyer qu'une valeur ... donc il faut 2 function()
DateDébut(DateCherchée as date) as date
DateFin(DateDébut as date) as date parce que la DateFin est fonction de DateDébut pour les jours ou on saute une date de la liste  (cas du 10/04)
 
Merci pour ton aide
@+Laurent
 
 

LaurentC

unread,
Apr 28, 2022, 5:26:23 AM4/28/22
to
J'ai trouvé solution (assez immonde) à mon problème ... mais j'arrive
sur un autre problème ... :-(
J'ouvre un nouveau post, merci à ceux qui ont essayé d'interpréter ma
prose incompréhensible.

investisseur pluriel

unread,
May 30, 2022, 5:16:06 PM5/30/22
to
Pour tout besoin de financement privé, plus de souci à se faire. Une seule référence. N'hésiter pas de nous contacter
La Caissière
Brigitte Duchaussoy
0 new messages