2ème plus grande valeur réelle

Bonjour,

Dans une série de valeurs, je voudrais trouver la deuxième plus grande valeur réelle (ou je ne sais trop comment je devrais l'appeler ).

Ainsi dans la série ci-dessous - qui représente la colonne A avec un titre - je voudrais trouver 30. La valeur de 1111 indiquée est fixe, ça ne peut pas en être une autre et les autres valeurs sont toujours nettement plus basses.

Titre

1

2

1111

30

1111

2

30

1

1111

2

Une idée soit en VBA, soit par formule ?

Cordialement.

Bonjour,

si titre est en A1

{=MAX(SI(A2:A11<>A4;A2:A11))}

en Matricielle

Crdmt

Bonsoir,

Si on ne connaît pas la cellule contenant la valeur 1111, une autre proposition :

=GRANDE.VALEUR($A$2:$A$11;NB.SI($A$2:$A$11;MAX($A$2:$A$11))+1)

Bonne soirée

Bonsoir,

2 propositions avec formules :

=GRANDE.VALEUR(Tableau1[Titre];NB.SI(Tableau1[Titre];1111)+1)
{=MAX(SI(Tableau1[Titre]<>1111;Tableau1[Titre]))}
6yvouille.xlsx (9.34 Ko)

Bonsoir,

en vba un truc moche je pense, en même temps c'est mon style...je sais c'est moche. J'aurai fait un truc compliqué mais je pense fonctionnelle

J'aurai listé les valeurs une par une, en m'étant de coté la dernière valeur la plus grande trouvé et en la m'étant de coté si j'en trouve une plus grande que celle-ci.

Je ne sais pas si c'est clair mais en gros :

1

- 1 la plus grande

2

- 2 la plus grande je garde 1

1111

- 1111 la plus grande je garde 2

30

- 30 plus grande que la seconde valeur la plus grande gardé (2), je garde 30 comme seconde valeur la plus grande.

Je ne sais pas si c'est beaucoup plus clair ^^.

c'est moche comme a mon habitude sans déclaration des variables ( j'y travail )

ça semble ok...

Sub test()

scdval = Cells(1, 1)
premval = Cells(1, 1)

For i = 2 To 17

If Cells(i, 1) > scdval Then
scdval = premval
premval = Cells(i, 1)

End If

Next i
MsgBox (scdval)
MsgBox (premval)

End Sub

Cdt

PS désolé je me suis trompé de compte que j'avais du devoir abandonnée, car oublie des identifiants et besoin de me connecter d'ailleurs, et en plein besoin de votre support...bref, Harissa23 Cdt.

8yvouille.zip (8.63 Ko)

Re-,

Sinon, une petite fonction personnalisée :

Function rngx(Plg As Range, Rg As Byte) As Double
Dim LesNb As Object
Dim Cel As Range
Dim Tmp
Set LesNb = CreateObject("Scripting.Dictionary")
For Each Cel In Plg
    LesNb(Cel.Value) = Cel.Value
Next Cel
Tmp = Application.Transpose(LesNb.Items)
RngX = Application.Large(Tmp, Rg)
End Function

Dans une cellule tu mets :

=rngx(A2:A11;2)

Tu peux modifier le rang (ici, c'est 2, comme dans la demande initiale)

Bonne soirée

Bonjour

=GRANDE.VALEUR($A$2:$A$11;SOMMEPROD(NB.SI($A$2:$A$11;"1111"))+1)

Cordialement

J'ai juste remis un peu plus au propre, mais pas grand changement.

J'abuse sur la déclaration des variables, surtout qu'on a prit le temps de m'expliquer...

Sub test()

Dim scdval As Single
Dim premval As Single
Dim i As Integer

scdval = 0
premval = 0

For i = 1 To 10

If Cells(i, 1) > scdval Then
scdval = premval
premval = Cells(i, 1)
End If

Next i

MsgBox (scdval)
MsgBox (premval)

End Sub

Cdt

Harissa23

Bonjour à tous,

Merci beaucoup pour vos nombreuses réponses.

@ DjiDji59430

Ta réponse et très intéressante par contre c’est vrai que la cellule A4 ne contient pas toujours le nombre 1111. Mais il suffit de remplacer A4 par 1111 dans ta formule et ça fonctionne parfaitement {=MAX(SI(A2:A11<>1111;A2:A11))}

@ cousinhub

Ca joue également absolument. De même que ta fonction personnalisée que j’ai découverte par après.

@ Jean-Eric

Tes deux solutions sont un peu plus élaborées avec l’utilisation de noms, mais ça rejoint les deux formules proposées par DjiDji et CousinHub.

@ Circus

Selon ta demande en privé, je veux bien te dire deux mots sur ta macro. Celle-ci ne fonctionne pas bien selon l’ordre de ta colonne A. Dans le fichier ci-joint, je t’avais dit que je voulais trouver le deuxième plus grand chiffre après 1111, celui-ci étant toujours le maximum. Ta macro ne trouve pas 36 car dès la 5ème boucle (quand i vaut 5), la condition If Cells(i, 1) > scdval Then n’est plus réalisée (par exemple lorsque cells(5,i) = 36 et scdval vaut 1111, ça ne passe plus par les instructions scdval = premval et premval = Cells(i, 1) et la valeur de 36 n’est pas retenue !!

J’ai créé une petite macro comparative à la tienne pour te montrer comment tu pourrais résoudre le problème dans cet esprit-là.

@ Amadéus

En plein dans le mille également.

Je n’ai que l’embarras du choix, c’est super

Amicalement.

8yvouille-bis.zip (9.13 Ko)

Merci de ta réponse Yvouille

En effet j'ai un peu merdé dans ma réponse, j'ai plus vu la valeur 1111 comme une valeur à titre d'exemple, j'avais mal lu...

La valeur de 1111 indiquée est fixe

J'avais mal lu voir pas lu visiblement...par contre j'ai bien envie de trouver une solution avec la valeur la plus grande non fixe ^^

En même temps je trouvais bizarre que moi le Bleu trouve la réponse pour un Rouge

Merci de la réponse vba, j'ai compris le principe vis à vis de ton besoin et le fonctionnement.

Cdt

Harissa23

Harissa23 a écrit :

En même temps je trouvais bizarre que moi le Bleu trouve la réponse

Je ne sais pas si tu peux vraiment dire que tu as trouvé la réponse, puisque je t’ai montré que ta macro ne fonctionnait pas J’ai créé une macro dans ton esprit afin de t’aider, mais de mon côté je voudrais utiliser les résultats et l’aide obtenue sur ce fil d’une autre manière.

J’ai donc ouvert un autre fil avec la suite de ma question si tu veux aller jeter un coup d’œil.

https://forum.excel-pratique.com/excel/formule-matricielle-en-vba-instruction-evaluate-t82522.html

Mon but serait d’avoir le résultat désiré (affecter à une variable la deuxième plus grande valeur d’une série) en une seule ligne de code.

Chaleureusement.

Non non j'ai du mal à m'exprimer, j’admets clairement que ma réponse déconnait, tu l'as démontré, je le reconnait clairement*

Et je te remercie de ta version revisité de ma réponse corrigé.

Je dit juste que je vais de mon coté chercher à réussir à faire " un truc qui répond à ce que j'avais cru comprendre comme demande initiale. " (pour moi même)

Puf ( désolé, m'exprimer et vba visiblement c'est pas pour moi....ça me déprime )

J'ai juste envie de corriger l'erreur que tu as mi en avant de ma macro que j'ai visiblement mal testé ( la corriger seul d'ailleurs ) mais avec une là valeur la plus haut variable.

*comme dit sur le poste précédent, je trouvai bizarre que je puisse trouver la réponse ( notre différence de niveau , le bleu le rouge ) mais bon j'ai cru que c'était possible, un pourquoi pas...

Rechercher des sujets similaires à "2eme grande valeur reelle"