EXCEL :: TRIER - TRIER.PAR - SOMMEPROD - CHOISIR - INDEX - SOMME.SI - NB.SI - DECALER - SEQUENCE : Tris dynamiques, regroupements et somme

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

oguruma

XLDnaute Impliqué
Bonjour le Forum,
Dans une application de gestion de personnel sur les évolutions de carrières - confronté à la production de KPI j'ai donc été amené à présenter des données triées et regroupées. Pour cela j'ai dû faire appel aux fonctions citées dans le titre. J'en profite aussi pour vous en faire partager avec un contenu totalement anonyme. Occasion aussi de rappeler comment on utilise ces fonctions avec quelques petites astuces.

Les données utilisées
Dans ce tableau on y trouve les effectifs d'une agence avec les évolutions de carrières sur l'indice, le type d'emploi et la classification.
Les chiffres exprimés totalement inventés pour le support montre le nombre d'évolutions par catégorie (indice, emploi, classification).
1743957337121.png


1. Tri le plus simple
Par défaut sur la 1ère colonne.
1743957551866.png


2. Tri sur une plage dynamique, choix des colonnes à trier
La construction de la plage dynamique passe par la fonction DECALER puis pour préciser sur quelles colonnes on souhaite trier : {1\4}
Code:
=TRIER(DECALER($A$4;;;NBVAL($A$4:$A$103);7);{1\4})

1743957949524.png


3. Tri sur une plage dynamique et choix des colonnes à trier et ordre pour chaque colonne
On ajoute {1\-1}

Code:
=TRIER(DECALER($A$4;;;NBVAL($A$4:$A$103);7);{1\4};{1\-1})

1743957962441.png

Variante sur une seule colonne : =TRIER(DECALER($A$4;;;NBVAL($A$4:$A$103);7);4;-1)

4. Tri avec un TOP (n) sur les résultats
Là c'est un peu plus complexe.
Le top(n) est détecté par la fonction SEQUENCE qui va retenir le n premiers résultats indiqués dans la liste déroulante. Ensuite il suffit de jongler avec les fonctions avancées de INDEX.
SEQUENCE($AR$2) = Nbre de lignes
{2\4\6} : Les colonnes

Le tri est réalisé par : TRIER(DECALER($A$4;;;NBVAL($A$4:$A$103);7);4;-1) ==> tri sur la colonne effectif

Code:
=INDEX(TRIER(DECALER($A$4;;;NBVAL($A$4:$A$103);7);4;-1);SEQUENCE($AR$2);{2\4\6})

1743958069858.png


5. Tris évolués avec TRIER.PAR

On indique la plage à trier et la plage critère -> sur quel plage doit-on s'appuyer pour trier les données (colonne effectif $D$4:$D$23) ?
1743958555727.png


6. Tri dynamique à la demande sur plusieurs colonnes de tri

Cette méthode demande un peu préparation au préalable.
Les liste déroulantes présente des noms de colonnes en texte qu'il faudra traduire en plage d'adresses.
Pour cela on passera par des champs nommés.
Le nom des champs nommés doit correspondre au nom présenté dans la liste déroulante.
Exemple :
1743958927199.png


Pour traduire la plage nommée en adresse plage dans la formule il faut donc passer par la fonction INDIRECT.
On applique la fonction sur le contenu de la cellule déroulante - exemple : INDIRECT($T$25)
En ce qui concerne l'ordre pas d'autre choix que de passer par la fonction SI... [enfin... je n'ai pas trouvé mieux]

Code:
=TRIERPAR($A$4:$G$23;INDIRECT($T$25);SI($U$25="CROISSANT";1;-1);INDIRECT($T$26);SI($U$26="CROISSANT";1;-1);INDIRECT($T$27);SI($U$27="CROISSANT";1;-1))
1743958749865.png


7. Regroupements et sommes

Comme on peut le voir on regroupe les données par paquet de 5. On connait ici le facteur de groupage.
Le groupage est réalisé par NBVAL($AA$29:AA29)*5-5;0;5 qui reste assez simple à comprendre (pas trouvé mieux pour le cas que j'ai eu à traiter en réel concernant la formule)

Code:
=SOMME(DECALER($D$4;NBVAL($AA$29:AA29)*5-5;0;5))
1743960600355.png


8. Regroupements et sommes - facteur de groupage dynamique
Le nombre d'éléments par paquet peut en fait être différent (cas de mon application réelle).
Pour cela plusieurs manières d'y parvenir. Les voici progressivement

On passe par un NB.SI que l'on répète chaque fois que l'on en a besoin. C'est assez lourd.
Code:
=SOMME(DECALER($D$4;NBVAL($AA$29:AA29)*NB.SI(DECALER($A$4;;;NBVAL($A$4:$A$103);1);AI29)-NB.SI(DECALER($A$4;;;NBVAL($A$4:$A$103);1);AI29);0;NB.SI(DECALER($A$4;;;NBVAL($A$4:$A$103);1);AI29)))

Le plus simple étant de le calculer une seule fois et de l'appliquer. Pour cela nous avons la fonction LET qui permet de stocker en mémoire le résultat d"un calcul pour pouvoir l'utiliser après
Code:
=LET(facteur;NB.SI(DECALER($A$4;;;NBVAL($A$4:$A$103);1);AI29);SOMME(DECALER($E$4;NBVAL($AA$29:AA29)*facteur-facteur;0;facteur)))

Contrainte : le critère de groupage doit correspondre à l'ordre des données conformément au tableau
1743961222652.png


On peut au final se libérer de cette contrainte en passant par la fonction très puissante SOMMEPROD
Code:
=SOMMEPROD(--(ETAB=AA36);EFFECTIF)
1743961331950.png

1743961406234.png

1743961378506.png


Et aussi une méthode via un SOMME.SI
Code:
=SOMME.SI(ETAB;AA44;EFFECTIF)

9. Le tout en dynamique par sélection du KPI à obtenir

Code:
=SOMMEPROD(--(ETAB=$AJ$35);INDIRECT($AJ$36))
1743961512050.png


10. Tri avec choix de la présentation des colonnes

Code:
=TRIERPAR(CHOISIR({1\2\3\4};CODE_AGENCE;AGENCE;INDICE;CLASSIFICATION);EFFECTIF;-1)

1743961608338.png


11. Via un tableau structuré - quelques exemples

1743961714183.png


1743961737853.png


1743961762041.png


1743961776598.png

1743961803500.png
 

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

Retour