Microsoft 365 Top 3 sans TCD

  • Initiateur de la discussion Initiateur de la discussion nat54
  • 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 !

Solution
Re
Ca devient confus...
Ton exemple en $B$27:$C$29 ne me semble pas bon.
Pourquoi ne pas utiliser des tableaux structurés pour tes données ?
J'ai adapté ma proposition pour ton dernier fichier.
Je pense avoir été au bout.

Cordialement
Bonsoir nat54, chris,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [J1]) Is Nothing Then Exit Sub
Dim P As Range
Application.ScreenUpdating = False
With [A1].CurrentRegion
    .AutoFilter 1, [J1] 'filtre automatique
    Set P = .Offset(1).SpecialCells(xlCellTypeVisible)
    .AutoFilter
    Set P = Intersect(P, .Columns(2).Resize(, 2))
End With
With [J3].Resize(Rows.Count - 2, 2)
    .Clear 'RAZ
    If P Is Nothing Then Exit Sub
    P.Copy .Cells(1) 'copier-coller
    .RemoveDuplicates Array(1, 2), Header:=xlNo 'supprime les lignes doublons
    .Sort .Cells(1, 2), xlDescending, .Cells(1), , xlAscending, Header:=xlNo 'tri sur 2 colonnes
End With
[J6].Resize(Rows.Count - 5, 2).Clear 'garde les 3 premiers
End Sub
Comme il peut y avoir des lignes en doublon il faut les supprimer.

A+
 

Pièces jointes

Bonjour à toutes et tous,
Je n'ai pas compris la même chose, donc je propose...
Je n'ai pas trouvé comment limiter le résultat aux trois premières lignes mais je trie les valeurs par opération en additionnant les montant correspondants.
VB:
=LET(
toto1;UNIQUE(FILTRE(Tableau1[Opération];Tableau1[Service]=J1));
toto2;SOMME.SI.ENS(Tableau1[Montant];Tableau1[Service];J1;Tableau1[Opération];toto1);
TRIER(ASSEMB.H(toto1;toto2);2;-1)
)
Si quelqu'un trouve comment ne renvoyer que les trois premières lignes, je suis intéressé.

Cordialement
 

Pièces jointes

Re
En fait la solution pour extraire les trois premières lignes était déjà donnée par @chris
VB:
=LET(
toto1;UNIQUE(FILTRE(Data[Opération];Data[Service]=J1));
toto2;SOMME.SI.ENS(Data[Montant];Data[Service];J1;Data[Opération];toto1);
PRENDRE(TRIER(ASSEMB.H(toto1;toto2);2;-1);3;2)
)
Cordialement
 

Pièces jointes

Re,

Génial cette proposition ! Même si je ne comprends rien à la formule ...

Mon collègue vient par contre de m'annoncer une complexité dont je n'avais pas connaissance lors de la création du sujet sur le forum.
On doit exclure une des opérations, admettons la A4 : est-ce possible ?
 
Bonjour à tous

Je ne vois aucune valeur à 27 ni 20 pour le service AAA dans le tableau fourni...

Si on mets sous forme d etableau
VB:
=PRENDRE(TRIER(FILTRE(Data[[Opération]:[Montant]];Data[Service]=J1);2;-1;0);3)

A placer en I4

Pour exclure A4
Code:
=PRENDRE(TRIER(FILTRE(Data[[Opération]:[Montant]];(Data[Service]=J1)*(Data[Opération]<>"A4"));2;-1;0);3)
 
Re
Ma vision sans "A4"
VB:
=LET(
toto1;UNIQUE(FILTRE(Data[Opération];(Data[Service]=J1)*(Data[Opération]<>"A4")));
toto2;SOMME.SI.ENS(Data[Montant];Data[Service];J1;Data[Opération];toto1);
PRENDRE(TRIER(ASSEMB.H(toto1;toto2);2;-1);3;2)
)
Cordialement
 
Re,

Voilà le tableau revu.
Je vois déjà un hic si 2 montants identiques mais on verra ça après ^^

Idée supplémentaire
• exclure l'opération en question du TCD
• peut-être que trier de façon décroissante les montants aiderait ?! pour ne conserver que les 3 premières valeurs du service
 

Pièces jointes

Dernière édition:
- 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

Réponses
12
Affichages
449
Réponses
4
Affichages
350
Réponses
12
Affichages
633
Réponses
7
Affichages
190
Réponses
5
Affichages
91
Réponses
8
Affichages
356
Retour