Rechercher valeur proche dans tableau

Fermé
redrum - 25 févr. 2009 à 16:59
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 22 avril 2014 à 19:22
Bonjour,

J'ai un tableau de référence à 5 lignes et 5 colonnes :

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

L'utilisateur spécifie une valeur. Par exemple : 10,2

Je cherche la formule qui va m'indiquer la valeur inférieure la plus proche de la valeur introduite par l'utilisateur, soit ici : 10

Merci pour votre aide.
A voir également:

9 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
25 févr. 2009 à 17:10
Bonjour
en principe à la lecrture de vos données et puisque toutes les valeurs du tableau se suivent, il n'y a pas besoin de faire référence au tableau
Essayez cet exemple dans une feuille vierge:
En A1, la valeur rentrée
En B1 la formule:
=ARRONDI(A1;0)
Nota: cette formule vous renvoie l'entier inférieur jusqu'à 0,5 inclus et l'entier supèrieur au dessus de 0,5.
Si vous voulez sortir la valeur supèrieure dans la cas de 0,5, vous pouvez utiliser la formule:
=SI(A1-ENT(A1)<0,5;ENT(A1);ENT(A1)+1)

Et, après vérification de votre demande, (je suis parti un peu vite) encore plus simplement:
Soit:
=ARRONDI.INF(A1)
Soit:
=ENT(A1)
Crdlmnt
1
Merci pour la réponse.

Vous n'avez pas compris ma demande.

En fait les valeurs ne se suivent pas, cela peut être n'importe quoi : des nombres positifs, négatifs, à virgule et sans aucune logique d'ordre.
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
25 févr. 2009 à 17:20
Salut

ton tableau étant en C15:G19 et ta valeur de tes en C9
=SOMMEPROD((C15:G19=ARRONDI.INF(C9;0))*1;C15:G19)
Mais ne fonctionne que si l'entier de ta valeur de référence se trouve dans ton tableau
Je creuse pour la suite...
0
Effectivement mais la valeur de référence n'est à 99% jamais égale aux valeurs inclus dans le tableau
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
25 févr. 2009 à 18:04
Salut Mabelle
Explique moi :
pourquoi aller chercher dans un tableau une valeur égale à celle recherchée puisque tu l'as dans la formule (ARRONDI.INF(C9;0)
Qu'y gagne t'on?
Crdlmnt
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
26 févr. 2009 à 09:46
Bonjour Vaucluse
Effectivement, je me suis un peu emballé sur ce coup...
Pourquoi faire simple quand on peut chercher compliqué
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
25 févr. 2009 à 23:48
Bonsoir tout le monde,

Voici une proposition avec tes 25 nombres en A1:E5 et le nombre à comparer en B9 :
=MAX(((A1:E5<=B9)*(A1:E5+10000)-B9+10000))+B9-20000
formule matricielle à valider par shift+ctrl+entrée. Si bien validée elle doit se retrouvée encadrée par des { }

Comme la formule ne marchait que pour des nombres positifs j'ajoute 2 fois 10000 pour ramener les négatifs dans les positifs (augmente cette valeur si besoin) et il faut donc en soustraire le double à la fin.

Limitation : ça te ramène -10000 si pas de nombre inférieur trouvé. Possibilité d'ajouter un test pour afficher un message.
D'autre part je ne suis pas sûr de moi à 100%, je te laisse tester plus complètement

eric
0
Merci pour la réponse.

Ca fonctionne, merci beaucoup.

Je ne suis pas trop à l'aise avec les formules matricielles. J'aimerais comprendre ce que fait la formule et j'ai un peu de mal. Peux-tu m'aider ?

J'ai une variante : je recherche la valeur la plus proche, qu'elle soit supérieure ou inférieure importe peu. D'autre part, si l'utilisateur entre un numéro de ligne, je voudrais que la recherche ne se fasse que sur le numéro de ligne spécifié. Peux-tu m'aider ?
0
et bien voilà 2 jours que j'essayer cette formule matricielle et grâce à toi j'ai compris que je ne la validé par convenablement je tapé " entrée" au lieu de Shift ctrl et entrée...
merci bcp!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
26 févr. 2009 à 14:45
Bonjour
Pour mon info
Avez vous essayé le message 1 et s'il ne correspond pas à ce que vous cherchez, pouvez vous me dire ce qui m'a échappé dans votre demande?
Crdlmnt
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
26 févr. 2009 à 19:59
Bonsoir tout le monde,

Vaucluse, relis les posts 4 et 5. Ce n'est pas la partie entière qu'il veut mais la valeur inférieure la plus proche (dans une liste) d'une donnée.
Par exemple :
liste : -2.3 5.8 13.2
donnée : 4.7 il faut retourner -2.3

redrum : une formule matricielle travaille sur une liste de valeurs (une matrice). Ce n'est pas forcément facile à appréhender ni à expliquer.
A la reflexion la formule peut être simplifiée en : =MAX((A1:E5<=B9)*(A1:E5+10000))-10000
Les négatifs m'avaient posé problème et il reste des traces d'une partie qui n'est pas nécessaire..

-avec (A1:E5<=B9) je recupère les valeurs <= à la donnée sous la forme d'une matrice {VRAI\FAUX\FAUX\VRAI\...} (la réponse est obligatoirement dans cette liste)
-avec (A1:E5<=B9)*(A1:E5+10000) mes negatifs deviennent positifs (+10000), et je multiplie les vrai\faux par les valeurs, si vrai je récupère la valeur+10000, si faux je récupère 0 et j'obtiens qcq chose comme {10001\10002\10003\10004\10005;10008\10009\...\10026;0\0\0\0\0}
Et la réponse est la maxi de cette liste auquel il faut soustraire 10000 pour retrouver le nombre original de la liste d'où :
=MAX((A1:E5<=B9)*(A1:E5+10000))-10000

Pour la variante, qui n'a plus rien à voir et qui n'est pas forcément plus simple (toujours ces nombres négatifs qui mettent le brin...tu es sûr d'en avoir oui ?) on verra un peu plus tard car ça réclame du temps.
Peut-être que tu auras eu des réponses d'ici là et réfléchi bien à tes besoin réels car ils ont l'air d'évoluer un peu trop vite à mon goût...
Peut-être as-tu mal analysé ton pb et que la solution (le chemin pour l'atteindre) pourrait être tout autre que ce que tu demandes. N'hésite pas à décrire ton besoin réel
eric
0
Merci Eric pour ta patience.

Je vais réitérer exactement mon besoin :

Le tableau comporte X ligne et Y colonnes de valeurs toutes positives. Chaque ligne et chaque colonne possède un titre.
Imagine que le contenu du tableau soit des surfaces (m²), que le titre des lignes soit des mètres (m) et le titre des colonnes soient également des mètres (m)

L'utilisateur entre deux paramètres :

1- une surface S
2- une longueur L.

Première Etape :

Je cherche cette longueur L qui, dans mon application, existe forcément dans un titre de ligne. Avec la fonction EQUIV réalisée sur la colonne qui comporte les titres de ligne, je récupère le numéro de la ligne qui comporte cette longueur.

Deuxième étape :

Sur le numéro de ligne que je viens de trouver, je cherche une surface Sp qui est la valeur la plus proche de S (oublie la notion de supérieur ou inférieur, on s'en moque maintenant)

Troisième étape :

A ce stade, on a identifié une cellule dont j'aimerais récupérer les coordonnées pour remonter vers le titre de la colonne qui l'accueille et qui est la valeur que je recherche.

Bien sur, on peut réaliser cela en multipliant les tableaux intermédiaires mais ce n'est pas très propre.

Voilà, j'espère que c'est plus clair, sinon fais moi signe.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214 > redrum
26 févr. 2009 à 22:10
hé bé pourquoi tu avais écrit cela peut être n'importe quoi : des nombres positifs, négatifs ???
Cela complexifie tout à point que tu ne peux imaginer.
Et oui, c'est bcp plus clair. Mais plus tard.... ;-)
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
26 févr. 2009 à 20:37
Effectivement, pas vu 4 & 5, pouvait pas savoir...surtout que mes messages, à part le dernier, sont passés avant les rectifications de Redrum!.... ou les complèments d'info, comme on veut.

Salut Eric

crdlmnt à tous
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
27 févr. 2009 à 00:12
re,

je pense que c'est ça que tu veux :
=INDEX(B1:F1;1;EQUIV(MIN(ABS(DECALER(B1;EQUIV(B11;A2:A7;0);0;1;5)-C11));ABS(DECALER(B1;EQUIV(B11;A2:A7;0);0;1;5)-C11);0))
toujours en matricielle...
Ex:
http://www.cijoint.fr/cjlink.php?file=cj200902/cijXwbTFkw.xls

eric
0
Bonjour,

Ma demande a un peu changé.
Je ne cherche plus le titre de colonne de la valeur la plus proche mais le titre de colonne de la valeur supérieure la plus proche.
Pouvez-vous m'aider ? Je patoge un peu dans la formule matricielle!
Merci!
0
Je m'autoréponds :

=INDEX(B1:F1;1;EQUIV(MIN(SI(DECALER(B1;EQUIV(B11;A2:A7;0);0;1;5)-C11>=0;DECALER(B1;EQUIV(B11;A2:A7;0);0;1;5)-C11));DECALER(B1;EQUIV(B11;A2:A7;0);0;1;5)-C11;0))
-1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
28 avril 2009 à 20:06
et moi je me remercie pour la réponse du 27/02...
0
bonjour
je suis débutant et j'ai un problème similaire, seulement j'ai

une suite de nombre entier dans la colonne B et un nombre dans la cellule D2
je voudrais une formule ki trouve dans la colonne B le nombre proche de celui dans D2 (par valeur supérieur)

EX:
B C D résultat= 3
15
1 2
19
3
4
7

ce serait meilleur si c'est en vba

merci
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 22/04/2014 à 19:22
Bonjour,

par formule :
=MIN(SI(B2:B7>=D2;B2:B7;9E+99))
formule matricielle à valider avec shift+ctrl+entrée
La formule doit s'entourer de { } si la validation est correcte.

que tu peux transcrire en vba :
a = [MIN(IF(B2:B7>=D2,B2:B7,9E+99))]

eric
0