1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| Option Base 1
Const fille = "fille"
Const garcon = "garcon"
Private Sub CommandButton1_Click()
topten fille
End Sub
Private Sub CommandButton2_Click()
topten garcon
End Sub
Private Sub CommandButton3_Click()
topten
End Sub
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
ListBox1.ColumnCount = 5 ' ajoute 5 colonne a la listbox
ListBox1.ColumnWidths = 70 ' les colonne font 70 point de large a adapter
End Sub
Function topten(Optional sexe As String = "tous")
Dim tablo, tablo2, i As Integer, tablofinal, lig, tablofille(), tablogarcon(), sex
Select Case sexe
Case "garcon": sex = "M"
Case "fille": sex = "F"
End Select
tablo = Range("e2:e" & Cells(Rows.Count, 1).End(xlUp).Row) 'on met en mémoire un tableau a 1 colonne avec les note
tablo2 = Range("a2:e" & Cells(Rows.Count, 1).End(xlUp).Row) 'on met aussi en mémoire un tableau a 5 colonne (avec tout)
ReDim tablofinal(UBound(tablo), 5) 'on dimentionne le tableau final a la dimension du tablo
For e = 1 To UBound(tablo2) '1 ere boucle sur tou les items
For i = 1 To UBound(tablo2) '2 eme boucle sur tout les items
If tablo2(i, 5) = WorksheetFunction.Large(tablo, e) Then ' si la valeur de la 5 Emme colonne (note) du tablo2 est égale a la plus grande du tablo
If tablo2(i, 3) = sex And lig < 10 Then 'si l'item de 3 eme colonne = la variable sex predefinis dans le select case on ajoute
lig = lig + 1 'on incrémente la variable lig de 1
For Z = 1 To 5 ' dans cette boucle on met tout les valeurs de chaque colonne et en ligne i du tablo2 dans le tableau final
tablofinal(lig, Z) = tablo2(i, Z)
Next
ElseIf sexe = "tous" Then ' si absence d'argument sexe alors on prend les filles et les garcons
If lig < 10 Then
lig = lig + 1 'on incrémente la variable lig de 1
For Z = 1 To 5 ' dans cette boucle on met tout les valeurs de chaque colonne et en ligne i du tablo2 dans le tableau final
tablofinal(lig, Z) = tablo2(i, Z)
Next
End If
End If
tablo2(i, 5) = 0 ' puisque c'était le plus grand on le met a zéro pour ne pas retomber dessus dans le futur tour de boucle
End If
Next
Next
ListBox1.List = tablofinal ' et on transpose au final le tablofinal dument remplie et dans l'ordre de la plus grande a la plus petite note
End Function |
Partager