Calcul de position en fonction du rang, avec des égalités
Résolu
MT
-
MT -
MT -
A voir également:
- Calcul de position en fonction du rang, avec des égalités
- Fonction si et - Guide
- Ma position - Guide
- Calcul moyenne excel - Guide
- Suivi position google - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
4 réponses
En fait pour être plus complet : j'ai réussi à programmer la version sans égalité parmi les valeurs : en utilisant la fonction large puis en recherchant la valeur retournée parmi la plage, puis en regardant la colonne de la cellule qui correspond. Mais avec ce principe, en cas d'égalité c'est toujours la même colonne qui est renvoyée quand bien même on souhaite le rang suivant.
MT
MT
Bonjour,
Que souhaites tu réellement en cas de doublon?
Soit CalculRang doit renvoyer une seule valeur (au hasard parmi les colonnes possibles) soit elle doit retourner toutes les colonnes correspondantes.
Dans le second cas, il faudra un paramètre supplémentaire.
Que souhaites tu réellement en cas de doublon?
Soit CalculRang doit renvoyer une seule valeur (au hasard parmi les colonnes possibles) soit elle doit retourner toutes les colonnes correspondantes.
Dans le second cas, il faudra un paramètre supplémentaire.
Dans les cas d'égalité CalculRang doit renvoyer une seule valeur. Cependant elle ne doit pas renvoyer la même valeur pour les valeurs de Rang (entrée) égales à 3, 4 et 5. Elle doit renvoyer une colonne différente à chaque fois, mais peu m'importe l'ordre.
Ex : CalculRang(MaPlage,3) renvoie 1 ; CalculRang(MaPlage,4) renvoie 7 ; CalculRang(MaPlage,5) renvoie 8.
Et pas : CalculRang(MaPlage,3) renvoie 1 ; CalculRang(MaPlage,4) renvoie 1 ; CalculRang(MaPlage,5) renvoie 1.
Ex : CalculRang(MaPlage,3) renvoie 1 ; CalculRang(MaPlage,4) renvoie 7 ; CalculRang(MaPlage,5) renvoie 8.
Et pas : CalculRang(MaPlage,3) renvoie 1 ; CalculRang(MaPlage,4) renvoie 1 ; CalculRang(MaPlage,5) renvoie 1.
Bon.
Voici le résultat.
Dans la cellule, saisir la formule exemple :
autre exemple :
permet "d'étirer" la formule vers le bas :
ou encore :
🎼 Cordialement,
Franck 🎶
Voici le résultat.
Option Explicit Function CalculRang(maPlage As Range, Rang As Integer) Dim temp(), tb(), j As Long, k As Long For j = 1 To maPlage.Columns.Count If k > 0 Then If Not Exist(temp(), maPlage.Cells(1, j).Value) Then k = k + 1: ReDim Preserve temp(1 To 2, 1 To k) temp(1, k) = maPlage.Cells(1, j).Value temp(2, k) = maPlage.Cells(1, j).Column End If Else k = k + 1: ReDim Preserve temp(1 To 2, 1 To k) temp(1, k) = maPlage.Cells(1, j).Value temp(2, k) = maPlage.Cells(1, j).Column End If Next j tb = Application.Transpose(temp) Call Quick(tb, LBound(tb), UBound(tb)) CalculRang = tb(Rang, 2) End Function 'sources : http://boisgontierjacques.free.fr/ Sub Quick(a, 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 = a(g, 2): a(g, 2) = a(d, 2): a(d, 2) = temp g = g + 1: d = d - 1 End If Loop While g <= d If g < droi Then Call Quick(a, g, droi) If gauc < d Then Call Quick(a, gauc, d) End Sub Function Exist(tb(), maVal) As Boolean Dim i As Long For i = LBound(tb, 2) To UBound(tb, 2) If tb(1, i) = maVal Then Exist = True: Exit Function Next Exist = False End Function
Dans la cellule, saisir la formule exemple :
=CalculRang(A2:F2;3)
autre exemple :
permet "d'étirer" la formule vers le bas :
=CalculRang(A2:F2;LIGNE()-1)
ou encore :
=CalculRang(I$21:P$21;LIGNE()-20)
🎼 Cordialement,
Franck 🎶