outofbusiness
Messages postés36Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 4 juin 2009
-
19 févr. 2008 à 05:18
outofbusiness
Messages postés36Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 4 juin 2009
-
7 mars 2008 à 11:22
Bonjour,
J'ai une colonne de valeur numeriques decimales. Je souhaite faire un vlookup pour chaque valeur dans un tableau contenant 2 colonnes.
Or, le vlookup classique me retourne la valeur associee a la valeur immediatement inferieure.
Je souhaite rechercher la valeur superieure la plus proche, et retourner la valeur associee.
petit exemple pour etre plus clair :
je recherche la valeur 24.4532 issue de ma colonne initiale, dans ce tableau :
NHenry
Messages postés15117Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention10 mai 2024159 20 févr. 2008 à 09:16
Bonjour
en utilisant mon code, une petite correction (par rapport à ton dernier post) :
Remplacer
if lRange.Value>pValue then 'Si on a trouver le premier nombre supérieur à celui recherché
par
if lRange.Value=>pValue then 'Si on a trouver le premier nombre supérieur à celui recherché
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
outofbusiness
Messages postés36Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 4 juin 2009 19 févr. 2008 à 09:34
Salut Julien !
je te l'accorde, je ne suis peut etre pas assez clair. mais il n'y a pas d'erreur.
en fait je dois me referer a ce petit tableau de 2 colonnes. les valeurs decimales sont des valeurs de reference.
du coup, pour reprendre l'exemple cite, si dans ma colonne ou je fais a la base mon vlookup, je recherche 24.4532, je dois retourner la valeur associee a la valeur de reference superieure dans le tableau. soit ici : la valeur la plus proche superieure est : 26.6789, et excel doit me retourner 5.
mon vlookup actuel fait : vlookup(ma_valeur,mon_tableau,2,TRUE)
ceci me retourne 4, soit se refere a la valeur la plus proche inferieure.
NHenry
Messages postés15117Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention10 mai 2024159 19 févr. 2008 à 12:41
Bonjour
Tu peux recoder la fonction (dsl, mais les fonction Excel c'est pas ma plus grande connaissance) :
Dans un module :
public function MaVLookUp(byval pValue as variant,byval pCells as Range, byval pCol as long) as long
dim lRange as range 'Déclaration
for lRange in pCells 'Parcours de la liste
if lRange.Value>pValue then 'Si on a trouver le premier nombre supérieur à celui recherché
MaVlookUp=lRange.offset(0,pCol-lRange.Column).value 'On retourne sa valeur
Exit function 'Et on sort
end if
Next lRange
MaVlookUp="Non trouvé" 'Sinon on affiche "Non trouvé"
end function
Ensuite dans ta cellule :
=MaVlookUp(24.4532;A2:A25;2)
n.b. : Code tapé directement, non exclu d'erreur
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 19 févr. 2008 à 21:00
Salut,
supposont que ton tableau soit construit comme suit :
A B C D
1 8.32 1 24.4532
2 12.4532 2
3 19.335 3
4 23.34 4
5 26.6789 5
6 34.6754 6
=INDIRECT("B" & (SOMME_SI(A1:A6,"<"&D1)+1))
cette formule suppose les valeurs en colonne sont classées en ordre croissant et que la premiere valeur ce trouve en ligne 1. Si par exemple la premiere valeur est en ligne 3 remplace +1 par +3. Comment ca marche ?
En faite cette formule compte le nombre de valeur inferieur a la valeur recherche puis on ajoute 1 le (+1 dans la formule) car la valeur recherchée est la premiere plus grande valeur, ce qui dans ton exemple donne 5. Donc le
SOMME_SI(A1:A6,"<"&D1)+1 aurait pu suffire mais ici je te donne une solution qui fonctionne meme si les valeur en colonne B ne sont pas une suite de valeurs en ordre croissant mais par exemple une suite de mots ou de jours etc...
essaye ceci :
outofbusiness
Messages postés36Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 4 juin 2009 20 févr. 2008 à 07:50
bigfishlevrai> parce que si la valeur que je cherche coincide precisement avec une valeur de reference du tableau, je veux qu'excel renvoie la valeur correspondante et pas incrementee de 1.
si ma valeur recherchee est 26.6789 au lieu de 24.4532, je dois obtenir 5 et non 6...
c'est la que ca se complique un peu....
outofbusiness
Messages postés36Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 4 juin 2009 7 mars 2008 à 11:22
merci pour la soluce !!
la solution de bigfish_levrai est pas mal (je la retiens ;-)), mais je dirais que j'ai une preference pour la solution de NHenry.
j'avais envie de coder un peu pour pas perdre la main (j'ai pas l'occasion de coder tous les jours), et puis une fonction personnalisee comme ca, ca epate les collegues qui ne connaissent pas trop le code ;-)