XL 2016 Classement 5 favoris

komet

XLDnaute Nouveau
Bonjour,
Fan de courses hippiques, je suis en train de me faire un tableau de prono.
En C1,dans la colonne A, les numéros des chevaux, dans la colonne C, leurs musiques et en AX, le coefficient de réussite de chaque chevaux.
Dans la feuille Favori, j'aimerai voir apparaitre les 5 favoris de la course (5 chevaux ayant le plus petit coefficient en AX dans la feuille C1)
Dans l'exemple proposé, le 7 et 12 ont la même valeur, cependant le 12 n'apparait pas.
Il semblerait que la fonction 'petite valeur' que j'ai utilisé ne prend pas en compte les doublons.
Avez-vous une idée pour résoudre mon problème en sachant que j'ai très peu de connaissance sur Excell.
Merci de votre aide
 

Pièces jointes

  • classement 5 favoris.xlsx
    13.6 KB · Affichages: 22

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Komet, Job,
Un essai avec :
VB:
=INDEX('C1'!$A$1:$A$15;1000*(PETITE.VALEUR('C1'!$AX$2:$AX$15+LIGNE('C1'!$AX$2:$AX$15)/1000;H$2)-ENT(PETITE.VALEUR('C1'!$AX$2:$AX$15+LIGNE('C1'!$AX$2:$AX$15)/1000;H$2))))
Matriciel, donc valider par Maj+Ctrl+Entrée.
L'astuce est de rajouter au nombre la quantité Ligne()/1000, ce qui évite les doublons.
 

Pièces jointes

  • classement 5 favoris.xlsx
    13.5 KB · Affichages: 13

komet

XLDnaute Nouveau
Bonjour Komet, Job,
Un essai avec :
VB:
=INDEX('C1'!$A$1:$A$15;1000*(PETITE.VALEUR('C1'!$AX$2:$AX$15+LIGNE('C1'!$AX$2:$AX$15)/1000;H$2)-ENT(PETITE.VALEUR('C1'!$AX$2:$AX$15+LIGNE('C1'!$AX$2:$AX$15)/1000;H$2))))
Matriciel, donc valider par Maj+Ctrl+Entrée.
L'astuce est de rajouter au nombre la quantité Ligne()/1000, ce qui évite les doublons.
Bonjour Sylvanu,
Merci pour ton aide.
Cependant, j'ai des erreurs de références dans certaines cellules et je ne vois pas la solution.
 

Pièces jointes

  • classement 5 favoris(2).xlsx
    13.8 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour komet, sylvanu;

Avec les fichiers de pronostics il vous faudra du VBA alors voyez le fichier joint et cette fonction VBA :
VB:
Function Classer(a, b)
a = a: b = b 'matrices
tri a, b, 1, UBound(a)
Classer = b 'matrice vecteur vertical
End Function

Sub tri(a, b, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2, 1)
g = gauc: d = droi
Do
    Do While a(g, 1) < ref: g = g + 1: Loop
    Do While ref < a(d, 1): d = d - 1: Loop
    If g <= d Then
      temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
      temp = b(g, 1): b(g, 1) = b(d, 1): b(d, 1) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
Elle utilise la macro de tri bien connue Quick sort.

A+
 

Pièces jointes

  • VBA 5 favoris(1).xlsm
    22.8 KB · Affichages: 18

komet

XLDnaute Nouveau
Bonjour Job75,
Merci pour ta solution qui fonctionne bien.
Il me reste à gérer les non partants. Si tu as une idée.
Pour ma part, programmer en VBA et les macros reste difficilent car je n'ai aucune connaissance la dessus.
Encore merci à toi et Sylvanu pour s'être penché sur mon problème.
 

Pièces jointes

  • VBA 5 favoris(Non partants).xlsm
    20.7 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour komet,
Il me reste à gérer les non partants. Si tu as une idée.
On peut utiliser cette fonction VBA, fichier (2) :
VB:
Function Non_partants(P As Range, R As Range, x$)
Dim a(), i&, n&
ReDim a(Application.Caller.Count - 1, 0) 'base 0
For i = 0 To UBound(a): a(i, 0) = "": Next i 'RAZ
For i = 1 To P.Count
    If P(i) = x Then
        a(n, 0) = R(i)
        n = n + 1
    End If
Next i
Non_partants = a 'matrice vecteur vertical
End Function
PS : les codes des fonctions doivent impérativement être dans un module standard.

A+
 

Pièces jointes

  • VBA 5 favoris(2).xlsm
    23.7 KB · Affichages: 9

komet

XLDnaute Nouveau
Bonjour komet,

On peut utiliser cette fonction VBA, fichier (2) :
VB:
Function Non_partants(P As Range, R As Range, x$)
Dim a(), i&, n&
ReDim a(Application.Caller.Count - 1, 0) 'base 0
For i = 0 To UBound(a): a(i, 0) = "": Next i 'RAZ
For i = 1 To P.Count
    If P(i) = x Then
        a(n, 0) = R(i)
        n = n + 1
    End If
Next i
Non_partants = a 'matrice vecteur vertical
End Function
PS : les codes des fonctions doivent impérativement être dans un module standard.

A+
En fait, j'aimerai que les non partants n'apparaissent pas dans la colonne "Top5"
 

Discussions similaires

Réponses
20
Affichages
1 K
Réponses
9
Affichages
434
Réponses
0
Affichages
966
Réponses
22
Affichages
742

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971