Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Rechercher 3 valeurs les plus élevées

  • Initiateur de la discussion Initiateur de la discussion KEYVIN67
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
502
Réponses
6
Affichages
115
Réponses
3
Affichages
164
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…