Tri en fonction d'un Nb Maxi

JBARBE

XLDnaute Barbatruc
Bonjour à tous,
Je voudrais un tri en fonction d'un Nb Maxi en B2 ( ici 14 sur 20 )
Merci à l'avance et bonne journée !
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi.xls
    50 KB · Affichages: 27

JHA

XLDnaute Barbatruc
Bonjour à tous,

A essayer en "N6"
Code:
=SIERREUR(RANG(K6;INDIRECT("$K$6:$K$"&5+$B$2);0);"")
Copier vers le bas

Edit: pour les doublons, tu peux essayer cette formule
Code:
=SIERREUR(RANG(K6;INDIRECT("$K$6:$K$"&5+$B$2);0)+NB.SI($N$5:$N5;$N5)-1;"")

JHA
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour JBARBE, JHA,

Une formule un peu compliquée mais qui a l'avantage de ne pas utiliser de fonctions volatiles :
Code:
=(LIGNE()<LIGNE(K$6)+B$2)*SOMMEPROD((LIGNE(K$6:K$25)<LIGNE(K$6)+B$2)*(K$6:K$25-LIGNE(K$6:K$25)/"1E12">=K6-LIGNE()/"1E12"))
Sur le tableau source on peut dupliquer une ligne, il n'y aura pas de doublon de rang.

Edit : avec "1E12" la formule fonctionne bien jusqu'à un maximum de 1000 et un minimum de -999,999999999998 en colonne K.

S'il peut y avoir des nombres au-delà de ces limites il faut diminuer l'exposant.

A+
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi(1).xls
    64.5 KB · Affichages: 20
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour JBARBE, JHA, le forum,

Comme je l'ai dit la méthode avec "1E12" (pour éliminer les doublons) a ses limites.

On peut l'éviter, le plus simple est alors d'utiliser 2 colonnes, avec et sans doublon.

Formule en N6 :
Code:
=(LIGNE()<LIGNE(K$6)+B$2)*SOMMEPROD((LIGNE(K$6:K$25)<LIGNE(K$6)+B$2)*(K$6:K$25>=K6))
Formule en O6 :
Code:
=MAX(N6-NB.SI(N6:N$25;N6)+1;)
Fichier (2).
j'ai enregistré en xls pour ceux qui n'ont que 2003 et antérieur !
Et justement pour eux les formules avec SIERREUR ne fonctionneront pas !!!

Bonne journée.
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi(2).xls
    73.5 KB · Affichages: 15

JHA

XLDnaute Barbatruc
Bonjour à tous,

Pour faire plaisir à Job75;) et aux possesseurs de excel en extension ".xls" ci joint la formule modifiée avec la fonction esterreur() au lieu de "sierreur()".

JHA
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi Rev2.xls
    31 KB · Affichages: 18

job75

XLDnaute Barbatruc
Re,

Finalement la solution la meilleure utilise 3 colonnes de résultats avec des formules très simples.

Je la préfère car il n'y a pas de formules volatiles et les calculs sont les plus rapides.

Fichier (3), voyez le post suivant pour les tests.

A+
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi(3).xls
    66.5 KB · Affichages: 16

job75

XLDnaute Barbatruc
Re,

Testez (en cliquant sur le bouton) les 2 fichiers joints de 10 000 lignes.

La solution de JHA est la plus rapide quand B2 < 6350.

A+
 

Pièces jointes

  • Test JHA(1).xls
    1.8 MB · Affichages: 17
  • Test job75(1).xls
    2.8 MB · Affichages: 13
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pour finir voici une solution VBA, le calcul est très rapide avec cette macro :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With [B5].CurrentRegion.Resize(, 9)
  If Intersect(Target, Union([B2], .Cells)) Is Nothing Then Exit Sub
  Application.ScreenUpdating = False
  If FilterMode Then ShowAllData 'si la feuille est filtrée
  .Cells(2, 13).Resize(Rows.Count - .Row) = "" 'RAZ
  If Int(Val([B2])) < 1 Then Exit Sub
  With .Cells(2, 1).Resize(Int(Val([B2])))
    .Columns(12) = .Columns(1).Value 'N° en colonne M
    .Columns(13) = .Columns(10).Value 'copie les valeurs de la colonne K en colonne N
    .Columns(12).Resize(, 2).Sort .Columns(13), xlDescending, Header:=xlNo 'tri sur la colonne N
    .Columns(13) = .Columns(1).Value 'N° en colonne N indiquant le classement
    .Columns(12).Resize(, 2).Sort .Columns(12), xlAscending, Header:=xlNo 'tri dans l'ordre initial
    .Columns(12) = "" 'RAZ de la colonne M
  End With
End With
End Sub
On notera qu'il faut 2 tris.

Fichiers joints.

Edit : j'ai ajouté les MFC.

A+
 

Pièces jointes

  • Nb_en_fonction_Nb_Maxi par VBA(1).xls
    74.5 KB · Affichages: 17
  • Test VBA(1).xls
    1.6 MB · Affichages: 15
Dernière édition:

Discussions similaires

Réponses
9
Affichages
246

Statistiques des forums

Discussions
312 182
Messages
2 086 002
Membres
103 084
dernier inscrit
Hervé30120