Valeur la plus proche

Résolu/Fermé
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011 - 6 mars 2009 à 14:15
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011 - 6 mars 2009 à 19:00
Bonjour,

Je souhaite trouver la fonction qui me permet de prendre la valeur la plus proche par rapport à un élément de comparaison....

Je m'explique ca sera plus clair!

J'ai un tableau avec en 1ere ligne une altitude en m:
ex:C1=300m D1=600m E1=900m F1=1000m etc...
à chaque altitude correspond une valeur qui m'intéresse
par exemple: C2=1000 D2=960 E2=930 F2=900 etc...

Ma valeur de référence est par exemple A1=730m (altitude du site étudié)

Je voudrais donc avoir une fonction qui me permette de prendre la valeur dans la ligne 2 la plus proche de l'altitude étudiée...

dans mon exemple la valeur que je veux obtenir serait donc celle de D2

et si A1=770, alors la valeur que je dois avoir est celle de E2

et ainsi de suite

Merci de votre aide!!

cordialement

Nico
A voir également:

12 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 mars 2009 à 14:56
Salut,
D'après la définition de la fonction RECHERCHEH(), si tu indiques VRAI tu dois obtenir la valeur la plus proche.
Donc dans ton cas la formule serait si tu veux le résultat en A2 :
A2: =RECHERCHEH(A1;C1:Z2;2;VRAI)
Mais ça ne fonctionne que si la valeur la plus proche est inférieure. Dans ton exemple si A1 = 770 avec ma formule, on obtient D2 au lieu de E2. Je ne vois qu'une macro pour t'aider. Si tu veux je peux essayer par macro...
0
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011
6 mars 2009 à 15:10
merci bien pour ton aide!! j'avais réussi aussi mais seulement pour les valeurs inférieures...

Après pour la macro je sais pas trop... ca peut marcher c'est clair mais l'autre jour j'en ai chopé une qui m'intéressait sur le net mais le pb c que ca modifie completement la cellule concerné et je n'arrivais plus à faire de modif après...

c'est sans doute moi qui ne sais pas me servir des macros!!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 mars 2009 à 15:37
si tu veux en VBA on peux le faire : tu confirmes :
tes valeurs doivent être en C1, D1 E1 etc.... et les valeurs correspondantes en C2 D2 etc...
La valeur que tu cherche, tu l'inscris en A1 et le résultat attendu doit s'inscrire en A2 ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 mars 2009 à 15:47
Voici la macro :

Sub macro1()
Dim val As Integer
Dim result1 As Integer
Dim result2 As Integer
val = ActiveSheet.Range("A1").Value
ActiveSheet.Range("A1").Select
If ActiveCell.Value >= ActiveCell.Offset(0, 2).Value Then
ActiveCell.Offset(0, 2).Select
Else
ActiveCell.Offset(0, 2).Select
ActiveSheet.Range("A2").Value = ActiveCell.Offset(1, 0).Value
End If
Do While ActiveCell <= val
ActiveCell.Offset(0, 1).Select
If ActiveCell = "" Then
ActiveSheet.Range("A2").Value = ActiveCell.Offset(1, -1).Value
Exit Sub
End If
Loop
result1 = ActiveCell - val
If result1 < "0" Then
result1 = result1 * -1
End If
result2 = ActiveCell.Offset(0, -1) - val
If result2 < "0" Then
result2 = result2 * -1
End If
If result1 > result2 Then
ActiveCell.Select
ActiveSheet.Range("A2").Value = ActiveCell.Offset(1, -1).Value
Else
ActiveSheet.Range("A2").Value = ActiveCell.Offset(1, 0).Value
End If
End Sub

bon courage
0

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 mars 2009 à 16:09
bonjour,

proposition par formule matricielle (validation par ctrl+maj+entrée et non par entrée comme d'hab) :
=INDEX(C2:F2;SOMMEPROD((ABS((C1:F1)-A1)=MIN(ABS((C1:F1)-A1)))*COLONNE(C1:F1))-2)
ou (tjrs matricielle)
=INDEX(C2:F2;MAX(SI((ABS((C1:F1)-A1)=MIN(ABS((C1:F1)-A1)));COLONNE(C1:F1))-2))

ci joint mon brouillon
https://www.cjoint.com/?diqi50e7Ut


le problème restant quand tu es à moitié de 2 altitudes: par ex 450m

la 1° formule renvoie "ref" la 2° renvoie 960 (correspond à l'altitude au dessus: 600m)

pour la macro, il faut passer par une événementielle : je jette un oeil pour le fun mais toujours se souvenir que l'ordre d'efficacité est: formules, fonctions, procédure sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 mars 2009 à 17:03
Et voici la macro

Private Sub Worksheet_Change(ByVal Target As Range)

Dim dercol As Byte, mini As Integer, seuil As Integer
 Dim cptr As Byte, rang As Byte
If Target.Address = "$A$1" Then


dercol = Range("IV1").End(xlToLeft).Column

mini = Abs(Cells(1, 3) - Target)
rang = 1
For cptr = 4 To dercol
    If Abs(Cells(1, cptr) - Target) < mini Then
        mini = Abs(Cells(1, cptr) - Target)
        rang = cptr
    End If
Next
Range("A3") = Cells(2, rang)
End If
End Sub


avec le classeur pour l'installer chez toi:
https://www.cjoint.com/?dirdEhYhih
0
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011
6 mars 2009 à 17:23
merci bcp pijaku!! mais si je peux me passer de vba...c'est pas plus mal!!

quant à michel_m....j'ai essayer avec tes formules...j'y arrive pas, rien à faire! je me décide donc à télécharger ton brouillon, je fais le test de celui ca, il marche nickel, c'est ce que je veux! mais dans ma feuille excel impossible de faire marche les formules!!!

là je comprends pas du tout.... j'ai vérifié les formats de mes cases etc...je vois pas! :(
0
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011
6 mars 2009 à 17:27
je viens meme de coller ton brouillon dans ma feuille, en re-validant ta formule par ctrl+maj+entrée (c'est bien ca?) et rien n'y fait ca ne marche pas!!!

en tout cas merci!! ca marche mais pas sur ma feuille lol! si jamais vous avez une idée, elle serait la bien venue!! sinon je vais bien finir par trouver....j'espère!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 mars 2009 à 17:53
xl<2007
mets un extrait de ton classeur (sans données confidentielles) sur
https://www.cjoint.com/
et colle le lien proposé dans ton message
je regarderai ainsi "sur du vrai"
0
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011
6 mars 2009 à 18:24
j'ai trouvé!! j'ai galéré mais c'est bon!! en fait le pb c'est que mes cellules dans mon classeur n'étaient pas de C à F mais de L à S.... du coup dans ta formule il fallait que je remplace le -2 à la fin par -11, ce qui correspond au décalage par rapport à A si j'ai bien compris...

en tout cas ca marche!! je vois pas à quoi sert ce -2 ou -11 mais l'essentiel c'est que ca fonctionne!

Merci pour tout

Cordialement

Nicolas
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 mars 2009 à 18:51
content pour toi!
effectivement, le 3 (colonneC=3) est bien le décalage / colA (colonneA=1)
merci de cocher "résolu"
Bon WE
0
nicoco98 Messages postés 59 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 24 février 2011
6 mars 2009 à 19:00
c'était donc ca!
merci à toi et bon WE

A+
0