morinn
Messages postés16Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention29 mars 2012
-
2 janv. 2007 à 23:07
morinn
Messages postés16Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention29 mars 2012
-
3 janv. 2007 à 23:25
Bonjour, j'aimerai avoir un moyen de pouvoir faire un classement mais juste sur les trois plus grandes valeurs de ma colonne.
Je m'explique plus simplement :
J'ai une première colonne avec des noms. Dans une seconde colonne j'ai des notes sur 20 , dans une troisième aussi une quatrième itou etc etc...
J'aimerai pouvoir ressortir les trois meilleurs d'une matière. J'aimerai que l'on puisse avoir juste les trois noms des trois meilleurs de chaque matière.
Avec GRANDE.VALEUR j'ai les trois meilleure snotes mais pas les noms.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 3 janv. 2007 à 00:15
Re, bon je te mets une fonction ici, pense à lire les commentaires afin de l'adapter à tes besoins (et placements). Si tu galères, mets moi où sont les données, et où est ce qu'on peut les placer.
Et sinon, pour lancer la procédure depuis excel, il faut le pavé de commande Visual Basic, click sur le bouton Play (exécuter une macro) et lance Classement :
Public Sub Classement()
'===============================================================
' en commentaires, des précisions pour modifications de ta
part
'===============================================================
Range("A2:B" & DLU).Select: Selection.Copy
'je fais comme si tes données partent d'A2 vers B qque
chose
' A étant la colonne des noms, et B
celles des notes
Range("D2").Select: ActiveSheet.Paste
'Choisi une colonne où il n'y a rien, ni à droite de
celle-ci
' et remplace donc D2 par la bonne
valeur
' ici, il y
a Range("E2), si avant t'as choisi (à la place de D2)
'M2, là ce sera N2
Selection.Sort Key1:=Range("E2"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
'toujours pareil, D5 à remplacer par la bonne colonne (sur
l'exemple précédant,
' c'est M5, et E à
remplacer par N
Range("D5:E" & DLU).Value = vbNullString
End Sub
Private Function DLU() As Integer
DLU = Columns(1).Find("", [A2], , , xlByRows, xlNext).Row - 1
'ici c'est pour chercher la
dernière ligne utilisée, pour la colonne
' des
noms. Si les noms sont en colonnes C, remplace Columns(1)
'par Columns(3) et [A2] par [C2]
'Si les noms sont en colonnes F, remplace
Columns(1)
'par Columns(6) et [A2] par
[F2]
'etc..
End Function
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 2 janv. 2007 à 23:50
pas de problème !
Par contre, je n'ai pas trouvé de fonction qui donne le texte d'une cellule à côté d'une autre, mais si Molenn (notre spécialiste des fonctions excel) passe par là, te filera la combine.
Moi je ne peux que te faire ça en VBA, et donc avec du code, mais une fonction personnalisé peut être créée facilement pour ça.
Ah et ta fonction (grande.valeur) fonctionne t-elle si tu as, par exemple, 5 égalité ?
Si tu veux tout ça sous code, tiens moi au courant, et dans ce cas précise moi où sont les noms et les notes (dans quelles colonnes, cellules de départ)
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Vous n’avez pas trouvé la réponse que vous recherchez ?
morinn
Messages postés16Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention29 mars 2012 3 janv. 2007 à 23:25
J'ai en fait une compilation de ta solution et de celle que j'ai recherché par ailleurs.
Je me retrouve donc avec une formule en VBA (la tienne) et une autre avec des formules classiques.
Je te remercie vivement de ta disponibilité et de ta rapidité.