XL 2016 Fonction Rang sur plage non continue

Steve8585

XLDnaute Nouveau
Bonsoir à tous,

Je recherche à appliquer ma fonction Rang sur une plage de donnée non continue.
Le problème est que la fonction n'est pas d'accord.
Exemple en pièce jointe.
Un grand merci d'avance.

Cordialement,

Steve
 

Pièces jointes

  • Fonction Rang sur plage non continue.xlsx
    13.6 KB · Affichages: 24

zebanx

XLDnaute Accro
Bonjour Steve8585, le forum.

Je ne comprends pas le critère pour ne pas "rentrer dans le classement".
La cellule E15 = 106.64% mais elle doit faire partie du classement, pourquoi svp ?
En bref, quel est le critère qui empêche de prendre vos deux cellules ?

xl-ment
zebanx
 

R@chid

XLDnaute Barbatruc
Supporter XLD
Re,
Excel ne peut pas savoir si tu vas exclure des matricules ou non, alors pour garder les R/O j'étais censé ajouter le préfixe "Ex" au matricule, toi tu peut l'ajouter au non, ou bine ajouter une colonne où tu mentionnes les matricules à Exclure.


Voir PJ


Cordialement
 

Pièces jointes

  • Steve8585_RangException.xlsx
    14.2 KB · Affichages: 5

Dugenou

XLDnaute Barbatruc
Bonjour,
Un essai en pj avec une colonne pour signaler les lignes à ne pas classer : adapter la condition à votre choix sur ce point.
Edit : Zebanx : hello : solution assez similaire

Cordialement
 

Pièces jointes

  • Steve8585 Fonction Rang sur plage non continue.xlsx
    14.7 KB · Affichages: 15

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Un essai avec une fonction personnalisée :
= Classement( xquoi, xplage, xsens, exclus() )
avec :

  • xplage est la référence des cellules de classement (que les cellules soient à prendre en compte ou non)
  • xquoi est la référence d'une seule cellule. C"est la cellule dont on calcule le rang. Cette cellule doit faire partie des cellules de xplage
  • xsens est le sens de classement. Si x vaut 0, alors le classement se fait du plus grand au plus petit sinon le tri se fait du plus petit au plus grand
  • exclus est un argument facultatif. exclus est une liste de références (séparées par des point-virgules). Chaque référence peut être celle d'une seule cellule ou bien d'une plage de cellules. Ces références de cellules doivent être comprises dans la plage xplage. On peut omettre exclus. Dans ce dernier cas, on n'exclut aucune cellule.
Exemple : =classement(E5;$E$5:$E$20;0;$E$13;$E$16)
  • xquoi -> E5 -> la cellule dont on recherche le rang
  • xplage -> $E$5:$E$20 -> la plage des cellules parmi lesquelles on recherche le rang
  • xsens -> 0 -> le sens de classement (ici du plus grand au plus petit)
  • exclus() -> $E$13;$E$16 - > les deux cellules qu'on exclut

voir le fichier joint...

Le code est dans module1 :

VB:
Function Classement(xquoi As Range, xplage As Range, xsens As Long, ParamArray exclus())
Dim unionExclus As Range, xrg, t, n&, aux, ech As Boolean, i&, valCherchee

Classement = ""
'quelques vérifs (que la cellule à classer n'est pas une cellule exclus)
If UBound(exclus) >= 0 Then
   Set unionExclus = exclus(0)
   For Each xrg In exclus: Set unionExclus = Union(unionExclus, xrg): Next xrg
   If Not Intersect(xquoi, unionExclus) Is Nothing Then Exit Function
End If
'tableau des éléments à classer
ReDim t(1 To xplage.Count)
For Each xrg In xplage
   If Intersect(xrg, unionExclus) Is Nothing Then n = n + 1: t(n) = xrg.Value
Next xrg
'tri du tableau (du plus petit au plus grand)
Do
   ech = False
   For i = 1 To n - 1
      If t(i + 1) < t(i) Then aux = t(i): t(i) = t(i + 1): t(i + 1) = aux: ech = True
   Next i
Loop Until Not ech
If xsens = 0 Then
   For i = 1 To Int(n / 2): aux = t(i): t(i) = t(n - i + 1): t(n - i + 1) = aux: Next i
End If
'le classement
valCherchee = xquoi.Value
For i = 1 To n
   If t(i) = valCherchee Then Classement = i: Exit Function
Next i
End Function


Attention ! Une ligne de code a "sauté" dans le fichier joint v1. Ne pas l'utiliser.
Utiliser la v1b
 

Pièces jointes

  • Steve8585- Fonction Rang sur plage non continue- v1.xlsm
    23.1 KB · Affichages: 15
  • Steve8585- Fonction Rang sur plage non continue- v1b.xlsm
    23.2 KB · Affichages: 14
Dernière édition:

Discussions similaires

Réponses
4
Affichages
155

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 656
dernier inscrit
VNVT