Rechercher valeur proche dans tableau
Fermé
redrum
-
25 févr. 2009 à 16:59
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 22 avril 2014 à 19:22
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 22 avril 2014 à 19:22
A voir également:
- Rechercher valeur proche dans tableau
- Rechercher ou entrer l'adresse - Guide
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
9 réponses
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 421
25 févr. 2009 à 17:10
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
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
Mabelle60
Messages postés
468
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
130
25 févr. 2009 à 17:20
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...
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...
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 421
25 févr. 2009 à 18:04
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
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
Mabelle60
Messages postés
468
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
130
26 févr. 2009 à 09:46
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é
Effectivement, je me suis un peu emballé sur ce coup...
Pourquoi faire simple quand on peut chercher compliqué
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
25 févr. 2009 à 23:48
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 :
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
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-20000formule 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
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 ?
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 ?
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 421
26 févr. 2009 à 14:45
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
26 févr. 2009 à 19:59
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
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
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
>
redrum
26 févr. 2009 à 22:10
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.... ;-)
Cela complexifie tout à point que tu ne peux imaginer.
Et oui, c'est bcp plus clair. Mais plus tard.... ;-)
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 421
26 févr. 2009 à 20:37
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
Salut Eric
crdlmnt à tous
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
27 févr. 2009 à 00:12
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
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
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))
=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))
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
28 avril 2009 à 20:06
28 avril 2009 à 20:06
et moi je me remercie pour la réponse du 27/02...
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
Modifié par eriiic le 22/04/2014 à 19:22
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
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
25 févr. 2009 à 20:11
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.