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
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
A voir également:
- Valeur la plus proche
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Paypal envoyer de l'argent à un proche - Guide
- Valeur ascii - Guide
- #Valeur excel somme - Guide
- Liste de valeur excel - Guide
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
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...
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...
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
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!!
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!!
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
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 ?
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 ?
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
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
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
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
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
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
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
6 mars 2009 à 17:03
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
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
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! :(
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! :(
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
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!
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!
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
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"
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"
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
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
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
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
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
effectivement, le 3 (colonneC=3) est bien le décalage / colA (colonneA=1)
merci de cocher "résolu"
Bon WE
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
6 mars 2009 à 19:00
c'était donc ca!
merci à toi et bon WE
A+
merci à toi et bon WE
A+