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

LaurentC Index/equiv

3 views
Skip to first unread message

MichD

unread,
May 1, 2022, 7:20:51 AM5/1/22
to

Bonjour,

Tout est dans le fichier à l'adresse suivante.

https://docs.google.com/spreadsheets/d/1DrkdOPmXl1Rxi9udkVSS4qbXWEBQr8FH/edit?usp=sharing&ouid=115373407214342299858&rtpof=true&sd=true

Le fichier sera disponible pour une durée limitée.

MichD

MichD

unread,
May 1, 2022, 7:34:02 AM5/1/22
to
Le 01/05/22 à 07:20, MichD a écrit :
Une recopie de la macro pour cette formule :

'------------------------------
Sub Test()

MsgBox Evaluate("INDEX(TblOpérations[[#All],[Soldée]]" & _
",MATCH(LaDate&CHAR(187)&Valeur,TblOpérations[[#All]," & _
"[Date]]&CHAR(187)&TblOpérations[[#All],[NomValeur]],0),1)")

End Sub
'------------------------------

MichD

LaurentC

unread,
May 1, 2022, 7:37:19 AM5/1/22
to
salut MichD

Excellent !

(J'ajoute vraiment super :-))

Nombreux mercis
@+laurent

LaurentC

unread,
May 1, 2022, 9:42:16 AM5/1/22
to
> '------------------------------
> Sub Test()
>
> MsgBox Evaluate("INDEX(TblOpérations[[#All],[Soldée]]" & _
> ",MATCH(LaDate&CHAR(187)&Valeur,TblOpérations[[#All]," & _
> "[Date]]&CHAR(187)&TblOpérations[[#All],[NomValeur]],0),1)")
>
> End Sub
> '------------------------------
> MichD

Salut

J'ai modifié ton fichier comme suit :

En E1 j'ai fixé la date au 04/05/2022 (LaDate).
En F1 j'ai donné toto3 (NomValeur).
Dans les formules j'ai modifié la fin de "...[NomValeur]],0),1)" en
"...[NomValeur]],1),1)" pour que Match trouve la valeur inférieure si
nécessaire.
Dans mon tableau, les dates sont classées par ordre croissant, mais
sont non contiguës et sont parfois en double (le gros détail oublié).
J'ai modifié le tableau comme suivant :
modifié la date 02/05/2022 en 03/05/2022
supprimé la ligne de tableau commencant par 04/05/2022

Date NomValeur Soldée
30/04/2022 toto1 1
01/05/2022 toto2 2
03/05/2022 toto3 3
03/05/2022 toto4 4
05/05/2022 toto6 6
06/05/2022 toto7 7
07/05/2022 toto8 8
08/05/2022 toto9 9


La forumule et VBA me renvoient 4 qui est la ligne Soldée pour la
première date trouvée ... J'attendai 3, la ligne Soldée pour la date <=
04/05/2022 ET NomValeur = toto3.

Désolé pour la fausse piste

Encore merci
@+Laurent

MichD

unread,
May 1, 2022, 10:24:55 AM5/1/22
to
Le 01/05/22 à 09:42, LaurentC a écrit :
La concaténation des 2 colonnes pour la date "03/05/22". donne ceci :

44684toto3
44684toto4

44684 est la valeur numérique de la date.

Demande à Excel de trier ces données en ordre ou décroissant, et tu vas
avoir ta réponse. N'oublie pas ton critère est une concaténation de 2
cellules.

Lors du tri, comme le résultat de la concaténation est du texte, le tri
se fait en comparant la valeur "ASCII" de chacun des caractères
(caractère par caractère). En conséquence, la plus grande valeur est :
44684toto4

C'est la manière que fonctionne Excel.

MichD


LaurentC

unread,
May 1, 2022, 11:26:20 AM5/1/22
to
Salut

> ...
> N'oublie pas ton critère est une concaténation de 2 cellules.
>
Alors ça ne va pas :-(

Je peux avoir 3 valeurs ou plus sur la même date ...

Match me plaisait bien avec la notion d'aller chercher la valeur
inférieur si celle recherchée n'est pas là.

Je vais reformuler ma question dans un nouveau post.

Merci
@+Laurent

LaurentC

unread,
May 1, 2022, 12:16:35 PM5/1/22
to
Salut

je pense néanmoins qu'il y a une solution avec index/match en
n'utilisant pas la concaténation mais avec un truc du genre

Range("F13") =
Evaluate("INDEX(prix,MATCH(1,(annee=A13)*(taille=B13)*(modele=C13),0))")

J'ai pas réussi à mettre en oeuvre :-(

(je pofine mon nouveau post et reviens rapidement :-)

@+Laurent

MichD

unread,
May 1, 2022, 2:09:57 PM5/1/22
to

Le 01/05/22 à 12:16, LaurentC a écrit :
Toujours en tenant comme du classeur publié et des modifications que tu
as apportées aux données, si tu tiens à index/equiv(), il y a ceci :

Formule dans une cellule :

Validation matricielle : Ctrl+Maj+enter

=INDEX(TblOpérations[[#Tout];[Soldée]];EQUIV(INDEX(TblOpérations[[#Tout];[Date]];EQUIV(LaDate;TblOpérations[Date];1))&INDEX(TblOpérations[[#Tout];[NomValeur]];EQUIV(LaDate;TblOpérations[Date];1));TblOpérations[[#Tout];[Date]]&TblOpérations[NomValeur];1)+1)

En VBA, cela donne :

Sub test()

MsgBox Evaluate("INDEX(TblOpérations[[#All],[Soldée]]," & _
"MATCH(INDEX(TblOpérations[[#All],[Date]],MATCH(LaDate," & _
"TblOpérations[Date],1))&INDEX(TblOpérations[[#All],[NomValeur]]," & _
"MATCH(LaDate,TblOpérations[Date],1)),TblOpérations[[#All]," & _
"[Date]]&TblOpérations[NomValeur],1)+1)")

MichD

MichD

unread,
May 1, 2022, 2:12:20 PM5/1/22
to
Le 01/05/22 à 14:09, MichD a écrit :
Tu pourrais ajouter SiErreur(laFormule;"") dans le cas où il n'y a pas
de correspondance afin d'éviter une valeur d'erreur #Valeur!

MichD

LaurentC

unread,
May 1, 2022, 2:41:00 PM5/1/22
to
Salut

>> MsgBox Evaluate("INDEX(TblOpérations[[#All],[Soldée]]," & _
>> "MATCH(INDEX(TblOpérations[[#All],[Date]],MATCH(LaDate," & _
>> "TblOpérations[Date],1))&INDEX(TblOpérations[[#All],[NomValeur]]," & _
>> "MATCH(LaDate,TblOpérations[Date],1)),TblOpérations[[#All]," & _
>> "[Date]]&TblOpérations[NomValeur],1)+1)")
>>
>> MichD

Je préfère cette solution à une bloucle comme vu plus haut.

Super, je fais avec ça.
Merci
@+Laurent
0 new messages