AFFICHER TOP 10 FOURNISSEUR EXCEL

Fermé
Yellow41 Messages postés 4 Date d'inscription samedi 7 août 2010 Statut Membre Dernière intervention 5 décembre 2021 - 7 août 2010 à 13:35
frippons Messages postés 550 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 18 octobre 2015 - 9 août 2010 à 00:24
Bonjour,

A partir de données excel (environ 40000 lignes), j'ai 5 colonnes (site, fournisseur, famille, sous-famille et prix). J'aimerais connaître pour chacun des sites (10 sites au total) le top 10 des fournisseurs ayant un prix total le plus élevé avec le prix total les familles et/ou sous-familles concernées (en sachant que des fournisseurs peuvent se retrouver plusieurs fois sur un même site pour des familles et/ou sous-familles différentes).
Ci-dessous un exemple de la base de données :

SITE FOURNISSEUR FAMILLE SOUS-FAMILLE PRIX
SITE 1 FOURNISSEUR 1 FAMILLE C SOUS-FAMILLE 1 4,17
SITE 2 FOURNISSEUR 11 FAMILLE C SOUS-FAMILLE 3 3,22
SITE 2 FOURNISSEUR 3 FAMILLE B SOUS-FAMILLE 2 2,55
SITE 5 FOURNISSEUR 4 FAMILLE C SOUS-FAMILLE 3 0,26
SITE 7 FOURNISSEUR 5 FAMILLE C SOUS-FAMILLE 3 3,54
SITE 3 FOURNISSEUR 6 FAMILLE C SOUS-FAMILLE 1 0,12
SITE 5 FOURNISSEUR 7 FAMILLE C 2,5
SITE 2 FOURNISSEUR 8 FAMILLE C SOUS-FAMILLE 1 0,02
SITE 2 FOURNISSEUR 3 FAMILLE A 2,35
SITE 2 FOURNISSEUR 10 FAMILLE A SOUS-FAMILLE 1 0,02
SITE 8 FOURNISSEUR 11 FAMILLE A SOUS-FAMILLE 1 0,47
SITE 4 FOURNISSEUR 12 SOUS-FAMILLE 1 0,23
SITE 1 FOURNISSEUR 13 FAMILLE A SOUS-FAMILLE 1 0,14
SITE 1 FOURNISSEUR 14 0,07
SITE 5 FOURNISSEUR 15 FAMILLE C SOUS-FAMILLE 1 1,11
SITE 3 FOURNISSEUR 16 FAMILLE C SOUS-FAMILLE 1 0,37
SITE 3 FOURNISSEUR 17 FAMILLE C SOUS-FAMILLE 1 0,83
SITE 6 FOURNISSEUR 18 FAMILLE C SOUS-FAMILLE 1 0,41
SITE 8 FOURNISSEUR 19 FAMILLE D SOUS-FAMILLE 1 0,07
SITE 8 FOURNISSEUR 18 FAMILLE E SOUS-FAMILLE 1 0,15
SITE 2 FOURNISSEUR 3 FAMILLE E SOUS-FAMILLE 1 0,83
SITE 5 FOURNISSEUR 22 FAMILLE D SOUS-FAMILLE 1 0,03
SITE 2 FOURNISSEUR 23 FAMILLE B SOUS-FAMILLE 1 0,71
SITE 2 FOURNISSEUR 24 SOUS-FAMILLE 1 0,18

J'ai fait des tableaux croisés dynamiques mais le résultat n'est pas convainquant et je pense que l'idéal serait une macro (mais là je n'y arrive pas !).
Ci-dessous le résultat que je souhaiterais avoir :
TOP 10 FOURNISSEUR

SITE 9

FOURNISSEUR PRIX TOTAL FAMILLE SOUS-FAMILLE PRIX
FOURNISSEUR 726 26,57 FAMILLE A SOUS-FAMILLE 3 1,06
FAMILLE C SOUS-FAMILLE 2 17,14
FAMILLE E SOUS-FAMILLE 2 8,37
FOURNISSEUR 723 9,04 SOUS-FAMILLE 2 9,04
FOURNISSEUR 724 7,82 FAMILLE C SOUS-FAMILLE 2 7,82
FOURNISSEUR 873 7,4 FAMILLE E SOUS-FAMILLE 1 7,4
FOURNISSEUR 286 6,05 FAMILLE C SOUS-FAMILLE 1 6,05
FOURNISSEUR 544 5,76 FAMILLE A SOUS-FAMILLE 2 0,26
FAMILLE E SOUS-FAMILLE 3 5,5
FOURNISSEUR 813 4,72 FAMILLE B SOUS-FAMILLE 3 4,72
FOURNISSEUR 744 4,35 FAMILLE B SOUS-FAMILLE 3 4,72
FOURNISSEUR 775 3,72 FAMILLE C SOUS-FAMILLE 1 3,72
FOURNISSEUR 773 3,6 FAMILLE C SOUS-FAMILLE 1 3,6


Merci pour votre aide.
A voir également:

4 réponses

Raymond PENTIER Messages postés 58423 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 mai 2024 17 105
7 août 2010 à 15:07
Bonjour.
Pourquoi une macro ? Il suffit d'utiliser :
soit la fonctionnalité Filtre en réalisant des filtres successifs,
soit l'assistant Sous-total après avoir fait les tris pertinents.
1
Raymond PENTIER Messages postés 58423 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 mai 2024 17 105
Modifié par Raymond PENTIER le 7/08/2010 à 15:38
Dans les 3 cas, le fait que la base de données ne soit pas homogène va créer des difficultés et des dysfontionnements. Ainsi :
* lignes 8 et 10 > sous-famille non indiquée
* lignes 13 et 25 > famille non indiquée
* ligne 15 > ni famille, ni sous-famille
dans les résultats souhaités :
* Fournisseur 723, la famille n'est pas indiquée
* Fournisseur 726, il faut répéter cette donnée au début des 2 lignes suivantes
* Fournisseur 544, à répéter ligne suivante
Cela explique aussi que ton TCD ne donne pas de résultat convaincant !
0
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
Modifié par Beeloobop le 7/08/2010 à 15:24
Bonjour,

Une macro qui utilise des filtres automatiques pourrait surement faire l'affaire. Désolée mais je ne vais pouvoir te donner que des bouts de codes, en éspérant que ça te suffise ou que quelq'un de plus expérimenté et patient que moi te donne un code complet. :)

Dans ta macro:

Tu crées des filtres sur tes colonnes :
With ActiveSheet
If Not .AutoFilterMode Then .Range("A1").AutoFilter
End With

Dans une boucle qui va te sélectionner tes sites un à un (une boucle for?)
tu lui dis de filtrer ta colonne site sur le premier site (variable!du genre i)

Selection.AutoFilter Field:=1, Criteria1:="premier site", Operator:=xlAnd

tu lui dis de filtrer sur ta colonne prix total les 10 1er
ActiveSheet.Range("$A$1:$D$40000").AutoFilter Field:=2, Criteria1:="10", _
Operator:=xlTop10Items

Tu crées une variable Lg qui est la valeur du nombre de lignes visibles, résultantes des filtres automatiques et sélectionne la plage de cellules visibles issues de ces filtres automatiques copie les valeurs (uniquement) de la sélection et les colle en G10 (par exemple)
Dim Lg%
Lg = Range("A1").End(xlDown).Row
Range("a1:d" & Lg).Copy
Range("g10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Tu remets à zéro les filtres automatiques
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=1
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=2
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=4

Et puis bah tu finis
End sub

ça doit pouvoir marcher si tu mets ta boucle for bien en place comme il faut! Au final j'ai presque donné un code complet. :) A toi de chercher pour le reste! Je suis preneuse si tu trouves, je vais continuer à chercher de mon côté!

Bonne chance!

Beeloobop
0
Bonjour,

Merci pour ton aide. Je regarde ce que je peux faire mais je suis vraiment nul pour les macros
0
frippons Messages postés 550 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 18 octobre 2015 100
9 août 2010 à 00:24
Bonjour,

Une macro dynamique de tri dans une autre page serait nettement plus efficace. Aussi non tu as des fonctions recherches et somme.si qui une fois combiné pourrait répondre à ta demande.

Mais pour traiter autant de données, la base de donnée seraient vraiment une bien meilleur idée.
0