AFFICHER TOP 10 FOURNISSEUR EXCEL

Yellow41 Messages postés 4 Statut Membre -  
frippons Messages postés 572 Statut Membre -
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 71871 Date d'inscription   Statut Contributeur Dernière intervention   17 402
 
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 71871 Date d'inscription   Statut Contributeur Dernière intervention   17 402
 
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 71 Statut Membre 11
 
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
Yellow41
 
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 572 Statut Membre 100
 
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