Valeur la plus proche
Résolu
nicoco98
Messages postés
59
Statut
Membre
-
nicoco98 Messages postés 59 Statut Membre -
nicoco98 Messages postés 59 Statut Membre -
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
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:
- Valeur la plus proche
- Comment envoyer de l'argent sur paypal a un proche - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur relative et absolue - Forum Programmation
- Attribuer une valeur à une cellule texte excel ✓ - Forum Excel
- Valeur ascii - Guide
12 réponses
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...
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...
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!!
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!!
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 ?
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 ?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
Et voici la macro
avec le classeur pour l'installer chez toi:
https://www.cjoint.com/?dirdEhYhih
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
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! :(
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! :(
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!
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!
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"
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"
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
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