Microsoft 365 Prendre les 10 1ère valeur d'une plage en fonction de 2 critères

Merlin258413

XLDnaute Occasionnel
Bonjour le Forum,

Je viens solliciter votre aide car j'ai une problématique que je n'arrive pas à régler.

Dans le fichier que je vous ai mis en PJ, je dois tous les mois après ma période de clôture indiquer les 10 premiers clients du mois pour chaque secteur.
Dans notre exemple, dans 'l'onglet FA, j'ai le secteur en cellule A10 = 1361 et le mois cellule A1.
Donc j'ai déjà 2 critères le mois et le secteur. Ici nous avons déjà une problématique sur le mois ca je mois que je dois utiliser dans l'onglet FA cellule A1 est sous la forme JJ/mm/aaaa et dans mon état (issu de notre ERP) la date est sous le format aaaamm.

Jusqu'à maintenant je réalisais un TCD (cf. l'onglet) issu de base qui se trouve dans l'onglet SUIVI EXPLOIT je sélectionnais mon mois et mon secteur. je trier ma colonne du mois du plus grand au plus petit; et je copiais en valeur dans l'onglet FA pour chaque secteur. cf. onglet FA ligne 20 à 30.

Ma question :

Est-il possible svp de rendre cette tâche automatique sans passer par un TCD et de travailler directement par l'onglet SUIVI EXPLOIT ?
C'est à dire qu'en fonction du mois indiqué en cellule A1 et du code secteur se trouvant en A10, A38, A62...
je trouve les 10 1er clients du mois.

Vous avez dans la plage E21 à F30 le résultat attendu pour le mois d'aout et le secteur 1361.
Le résultat doit apparaitre dans la plage A21:C30.

De plus il arrive parfois que dans les 10 1er client j'obtienne le nom (vide). ce qui signifie dans notre entreprise que c'est un client interne.
Donc est-il possible que si dans les 10 1er résultats j'ai le client (vide) alors je le remplace par clients internes.


J'espère avoir été assez clair dans mes explications et je vous remercie par avance pour votre aide.
 

Pièces jointes

  • Fiche ANALYSE.xlsm
    616.6 KB · Affichages: 19
Solution
Vous vous êtes trompé, vous avez écrit :
VB:
For Each secteur In [A258,A286,A324,A353,A381]
alors qu'il faut :
VB:
For Each secteur In [A258,A286,A324,A352,A380]
Je rappelle que le code élimine les valeurs zéro.

Merlin258413

XLDnaute Occasionnel
Bonjour à tous,
Un essai en B21, formule unique et dynamique pour Excel 365 :
VB:
=LET(u;SUBSTITUE(UNIQUE(Base[[ Nom client]]);0;"");
s;BYROW(u;LAMBDA(p;SOMME.SI.ENS(Base[Production];Base[[ Code secteur]];A10;Base[ [ Mois AAAAMM] ];CNUM(C3&TEXTE(A1;"mm"));Base[[ Nom client]];p)));
PRENDRE(TRIER(ASSEMB.H(SI(u="";"Clients internes";u);s);2;-1);10))

Et j'ai été obligé de supprimer les parenthèses du titre de la colonne Mois :
Mois (AAAAMM) devient Mois AAAAMM
Cordialement
 

ALS35

XLDnaute Occasionnel
Re,
Avec les $ qui vont bien, la formule en B21 devient :

VB:
=LET(u;SUBSTITUE(UNIQUE(Base[[ Nom client]]);0;"");
s;BYROW(u;LAMBDA(p;SOMME.SI.ENS(Base[Production];Base[[ Code secteur]];A10;Base[ [ Mois AAAAMM] ];CNUM(C$3&TEXTE(A$1;"mm"));Base[[ Nom client]];p)));
PRENDRE(TRIER(ASSEMB.H(SI(u="";"Clients internes";u);s);2;-1);10))
recopiable en B49 et B73
 

Merlin258413

XLDnaute Occasionnel
=LET(u;SUBSTITUE(UNIQUE(Base[[ Nom client]]);0;""); s;BYROW(u;LAMBDA(p;SOMME.SI.ENS(Base[Production];Base[[ Code secteur]];A10;Base[ [ Mois AAAAMM] ];CNUM(C$3&TEXTE(A$1;"mm"));Base[[ Nom client]];p))); PRENDRE(TRIER(ASSEMB.H(SI(u="";"Clients internes";u);s);2;-1);10))
merci cela semble être ce qui se rapproche le mieux de ma solution.
j'ai recopié cette formule dans la cellule C49 comme au dessus
Je ne comprends pas pourquoi mon résultat est décalé pouvez vous me dire pourquoi ? j'ai du faire une mauvaise manip ci joint le ficher
 

Pièces jointes

  • Fiche ANALYSE Modifié.xlsm
    613.5 KB · Affichages: 4

Merlin258413

XLDnaute Occasionnel
Bonjour Merlin, Job, Als,
"Just for the fun" et avant que le VBA ne s'arrête (😅 ) un essai en PJ avec du VBA comme demandé.
La macro s'exécute automatiquement lorsqu'on change la date en FA A1.

Bonjour Sylvanu et bravo
j'essaie de mettre cela dans mon fichier d'origine. C'est exactement ce que je cherchais.
Je reviens vers toi demain
Une petite question comment la macro sait quand je change de secteur car je peux aller jusqu'à une 20 aine de secteur
Encore un grand merci
 

ALS35

XLDnaute Occasionnel
SI le secteur ne compte que 5 clients est ce qu'on peut rajouter une condition du style les 10 premiers clients qui ont une production différente de 0. Comme ca si j'en ai que 4 ou 5 il m'indique uniquement cela.
VB:
=LET(u;SUBSTITUE(UNIQUE(Base[[ Nom client]]);0;"");
s;BYROW(u;LAMBDA(p;SOMME.SI.ENS(Base[Production];Base[[ Code secteur]];A10;Base[ [ Mois AAAAMM] ];CNUM(C$3&TEXTE(A$1;"mm"));Base[[ Nom client]];p)));
SIERREUR(PRENDRE(TRIER(ASSEMB.H(SI(u="";"Clients internes";u);s);2;-1);MIN(10;NB(FILTRE(s;s>0))));""))
La fonction LET permet de nommer des plages ou des formules, ici u (pour unique) est la liste unique des clients, s (pour somme) est la somme pour chaque client correspondant aux critères demandés (Somme.Si.Ens)
p est le paramètre de la fonction Lambda qui s'applique à la fonction BYROW (par ligne) et représente le nom client concerné (pour chaque ligne de u).
Cordialement
 

danielco

XLDnaute Accro
Essaie en A21, à recopier plus bas :
VB:
=LET(tbl;FILTRE(Base[[ Nom client]];(Base[[ Code secteur]]=A10)*(Base[Mois (AAAAMM)]=CNUM(ANNEE($A$1)&TEXTE($A$1;"mm"))*(Base[[ Nom client]]<>"")));PRENDRE(UNIQUE(TRIER(ASSEMB.H(tbl;BYROW(tbl;LAMBDA(x;SOMME.SI.ENS(Base[Production];Base[[ Nom client]];x;Base[[ Code secteur]];A10;Base[Mois (AAAAMM)];CNUM(ANNEE($A$1)&TEXTE($A$1;"mm"))))));2;-1));10))

Daniel
 

merinos

XLDnaute Accro
Bonjour à tous,
Un essai en B21, formule unique et dynamique pour Excel 365 :
VB:
=LET(u;SUBSTITUE(UNIQUE(Base[[ Nom client]]);0;"");
s;BYROW(u;LAMBDA(p;SOMME.SI.ENS(Base[Production];Base[[ Code secteur]];A10;Base[ [ Mois AAAAMM] ];CNUM(C3&TEXTE(A1;"mm"));Base[[ Nom client]];p)));
PRENDRE(TRIER(ASSEMB.H(SI(u="";"Clients internes";u);s);2;-1);10))

Et j'ai été obligé de supprimer les parenthèses du titre de la colonne Mois :
Mois (AAAAMM) devient Mois AAAAMM
Cordialement
@ALS35 ,


LET ... C'est super... je vais jouer.... Merci

Merinos
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 271
Membres
103 168
dernier inscrit
isidore33