VBA - 2e plus petit

Bonjour,

Je souhaiterai avoir une formule vba qui permette de me donner la ligne où se trouve le 2e nombre le plus petit dans une liste où il peut y avoir des doublons.

J'ai trouvé une formule matricielle qui répond partiellement à cela, à l'aide de grande.valeur et si, mais elle ne semble pas marcher quand il n'y a que 2 nombre dans la liste, et de plus je ne sais pas comment la transcrire en VBA

102e-petit.xlsx (9.02 Ko)

Bonjour,

si on part de votre demande, la deuxième valeur plus petites à retournée est la deuxième valeur plus petite trouvée en partant d'en "haut" de la feuille.

Le soucis intervient quand il y a des doublons, mais qu'est ce que vous faites de cette valeur ?

Car après tout un 100 en première valeur plus petite et un 100 en deuxième valeur plus petite, cela reste une valeur à 100.

Il doit manquer une indication dans l'énoncé de la demande, non ?

Sinon, l'idée est de "créer" artificiellement un décalage entre ces différentes valeurs grâce à leur position, au niveau des lignes :

si vous faite valeur de la cellule + numéro de ligne où se trouve cette cellule / par 1000, on crée un décalage entre le 100 de la ligne 1 (100,0001) et le 100 de la ligne 2 (100,0002) où on voit bien que la deuxième petite valeur est 100,0002....

Mais comme vous parlez de valeur, peu importe sa position dans la colonne car 100 est toujours égale à 100 même si c'est la trentième petite valeur...

@ bientôt

LouReeD

Bonjour,

Mon exemple n'était probablement pas très parlant en effet. Je vais essayer de préciser: Si j'ai la liste suivante: 100;100;101;100;102;101 le 2e plus petit est pour moi 101. Je considère les doublons comme identiques.

Comme indiqué je souhaiterai avoir la formule vba me retournant la ligne ou se trouve cette 2e plus petite valeur...

Merci

Donc le principe serait :

une extraction sans doublon,

ensuite on trouve la deuxième petite valeur de cette extraction,

ce qui nous permet de trouver la première ligne où se trouve cette valeur...

Est-ce bien cela ?

@ bientôt

LouReeD

Bonjour à tous,

une possibilité :

=PETITE.VALEUR(A1:A5;NB.SI(A1:A5;PETITE.VALEUR(A1:A5;1))+1)

En vba, soit cette formule, soit un dictionary sans doublon si tu dois prolonger ta liste des xième petites valeurs.

eric

Évidemment.... Évidemment ent ent...

Bonjour eriiic !

Je crois bien que je n'y arriverais jamais à me "poser" les bonnes questions !

@ bientôt

LouReeD

Bonjour loureed,

Attendons son retour.

Parce que si après il vaut la 3e, puis la 4e, puis... il faudra aller sur ton idée

eric

Bonjour eriiic,

La formule fonctionne très bien, merci! Je ne serai pas intéressé par les xiemes petites valeurs

Y-a-t-il ensuite une manière facile de traduire cette formule en langage vba?

Re,

a = Evaluate("SMALL($A$1:$A$5,COUNTIF($A$1:$A$5,SMALL($A$1:$A$5,1))+1)")

eric

Impec, merci beaucoup pour votre aide

Bonjour le forum.

Merci eriiic et PH1084 :

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba petit"