Rechercher valeur proche dans tableau

redrum -  
eriiic Messages postés 24581 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.
Configuration: Windows XP
Internet Explorer 6.0

9 réponses

  1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
    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
  2. Mabelle60 Messages postés 167 Date d'inscription   Statut Membre Dernière intervention   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
    1. redrum
       
      Effectivement mais la valeur de référence n'est à 99% jamais égale aux valeurs inclus dans le tableau
      0
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
    1. Mabelle60 Messages postés 167 Date d'inscription   Statut Membre Dernière intervention   131
       
      Bonjour Vaucluse
      Effectivement, je me suis un peu emballé sur ce coup...
      Pourquoi faire simple quand on peut chercher compliqué
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. 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
    2. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. 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
      1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281 > 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
  8. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. 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
  10. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      et moi je me remercie pour la réponse du 27/02...
      0
    2. 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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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