XL 2010 Rechercher 3 valeurs les plus élevées

KEYVIN67

XLDnaute Nouveau
Bonjour,

Je cherche à utiliser une formule qui me permettrait de rechercher 3 données avec des valeurs associées les plus élevées.

Pour mieux comprendre le sujet, j'ai créé un tableau excel qui sert uniquement d'exemple.

Merci d'avance,

cordialement,

Kévin
 

Pièces jointes

  • Exemple tableau recherche grandeur.xlsx
    12.3 KB · Affichages: 27

job75

XLDnaute Barbatruc
Bonjour KEYVIN67, vgendron,

Avec cette macro dans le fichier joint (Alt+F11 pour accéder au VBA) :
Code:
Sub Les_3_premiers()
Dim dest As Range, P As Range, ncol%, a(), i&, j&
Set dest = [E2] '1ère cellule, à adapter si nécessaire
Application.ScreenUpdating = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'si la feuille est filtrée
dest.CurrentRegion.Clear 'RAZ
[A2].CurrentRegion.Copy dest
Set P = dest.CurrentRegion
ncol = P.Columns.Count
ReDim a(1 To P.Rows.Count, 1 To 1)
For i = 1 To UBound(a)
    If P(i, 1) <> "" Then
        With P(i, 1).MergeArea
            .Offset(, 1).Resize(.Count, ncol - 1).Sort .Columns(3), xlDescending, Header:=xlNo 'tri sur la 3ème colonne
            For j = i To i + IIf(.Count < 3, .Count - 1, 2)
                a(j, 1) = 1
            Next j
        End With
    End If
Next i
With P.Columns(ncol + 1)
    .Value = a
    On Error Resume Next 'si aucune SpecialCell
    Intersect(P, .SpecialCells(xlCellTypeBlanks).EntireRow).Delete xlUp
    .ClearContents
End With
End Sub
A+
 

Pièces jointes

  • Exemple tableau recherche grandeur(1).xlsm
    27.9 KB · Affichages: 28

job75

XLDnaute Barbatruc
Bonjour le forum, hello capc93,

J'ai testé la macro précédente en copiant le tableau sur 3000 lignes : pas de problème.

Par contre sur 30 000 lignes il faut défusionner les cellules pour pouvoir faire un tri sur la colonne auxiliaire :
Code:
Sub Les_3_premiers()
Dim dest As Range, P As Range, ncol%, a(), i&, j&
Set dest = [E2] '1ère cellule, à adapter si nécessaire
Application.ScreenUpdating = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'si la feuille est filtrée
dest.CurrentRegion.Clear 'RAZ
[A2].CurrentRegion.Copy dest
Set P = dest.CurrentRegion
ncol = P.Columns.Count
ReDim a(1 To P.Rows.Count, 1 To 1)
For i = 1 To UBound(a)
    If P(i, 1) <> "" Then
        With P(i, 1).MergeArea
            .Offset(, 1).Resize(.Count, ncol - 1).Sort .Columns(3), xlDescending, Header:=xlNo 'tri sur la 3ème colonne
            For j = i To i + IIf(.Count < 3, .Count - 1, 2)
                a(j, 1) = 1
            Next j
        End With
    End If
Next i
With P.Columns(ncol + 1)
    .Value = a
    P.Columns(1).UnMerge 'défusionne les cellules
    P.Resize(, ncol + 1).Sort .Cells 'tri sur la colonne auxiliaire
    On Error Resume Next 'si aucune SpecialCell
    Intersect(P, .SpecialCells(xlCellTypeBlanks).EntireRow).Delete xlUp
    .ClearContents
End With
'---bordures---
P.Borders.LineStyle = xlNone
P.SpecialCells(xlCellTypeConstants).Borders.Weight = xlThin
End Sub
Chez moi la macro s'exécute alors en 8,6 secondes, c'est tout à fait acceptable.

Fichier (2).

Bonne journée.
 

Pièces jointes

  • Exemple tableau recherche grandeur(2).xlsm
    28.6 KB · Affichages: 23

KEYVIN67

XLDnaute Nouveau
Hello
un essai avec formules matricielles

Bonjour,

La formule est exactement ce que je recherche sauf que sur mon fichier original sur lequel je travaille à la place de A, B, C, ... J'ai Moteur, Auxiliaire, Compresseur, ...

Voir fichier joint, merci Vgendron.

Concernant les macros, je ne préfère pas m'aventurer là dedans si une autre méthode fonctionne, merci quand même !

Cordialement
 

Pièces jointes

  • Copie de Exemple tableau recherche grandeur.xlsx
    13.4 KB · Affichages: 22

KEYVIN67

XLDnaute Nouveau
avec Modif

attention. suis quasi certain que si tu as deux fois la meme valeur.. ca va bugger..
la macro reste surement le mieux..

Hello @All

Merci, mais tu as raison si j'ai 2 fois la même valeur, cela me donne 2 fois le même nom. Par exemple si j'ai :
-Moteur : Joint = 52
-Moteur : onduleur = 52

Les formules vont me donner :
1. Moteur : joint = 52
2. Moteur : joint = 52

Je vais essayer de voir avec les macros. Merci. A moins qu'il y a une solution à ce problème.

Cordialement,
 

Pièces jointes

  • Copie de Exemple tableau recherche grandeur-2.xlsx
    12.2 KB · Affichages: 23

Discussions similaires

Statistiques des forums

Discussions
312 074
Messages
2 085 066
Membres
102 770
dernier inscrit
mathieu.lemaitre