Rechercher valeur proche dans tableau

redrum -  
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

9 réponses

Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 447
 
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
redrum
 
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 492 Statut Membre 131
 
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
redrum
 
Effectivement mais la valeur de référence n'est à 99% jamais égale aux valeurs inclus dans le tableau
0
Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 447
 
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 492 Statut Membre 131
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
redrum
 
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
tite lala
 
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 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 447
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
redrum
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282 > redrum
 
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 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 447
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
redrum
 
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
redrum
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
et moi je me remercie pour la réponse du 27/02...
0
mala
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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