XL 2021 Classement hiérarchique selon plusieurs critères

Richard30

XLDnaute Nouveau
Bonjour,

Je bute depuis quelques jours sur le problème cité en objet.

Je cherche à classer un tableau suivant une hiérarchie afin de pouvoir ensuite générer automatiquement et facilement des organigrammes via une Macro VBA que j'ai récupéré sur un fil de ce forum et qui fonctionne parfaitement, ce dernier point n'est donc pas le problème.

Dans le fichier joint, je saisi en colonne B les membres de l'organigramme et ensuite dans la colonne G leurs supérieurs hiérarchiques.

Je calcule en colonne H leur niveau hiérarchique qui m'est indispensable pour la Macro.
A partir des saisies des lignes 2 à 8, je souhaite obtenir le tableau en lignes 13 à 19, qui doit être absolument classé comme ça pour permettre la génération par VBA de l'organigramme.
Je précise que si je me tords les neurones pour cela, c'est que l'outil sera utilisé par une personne qui ne connait que les bases d'Excel et qui doit régulièrement effectuer des mises à jour sur de nombreux organigrammes.

Je vous remercie par avance pour votre aide
Richard
 

Pièces jointes

  • Classement Hierarchique.xlsx
    10 KB · Affichages: 16
Dernière édition:

Richard30

XLDnaute Nouveau
Bonjour.
Je n'étais pas disponible cette semaine.
Je ne comprends pas la philosophie pour la création des lignes 13 à 19.
Pouvez-vous m'éclairer, s'il vous plait?
Bonjour,
Merci de vous pencher sur mon problème, j'y ai encore passé 3 h ce matin, sans plus de succès.
Les lignes 13 à 19 sont un des résultats que je souhaite obtenir.
Les lignes 18 et 19 pourraient tout aussi bien se trouver classées sous la ligne 13, le résultat serait aussi bon.
Bon courage !
 

tbft

XLDnaute Accro
Bonsoir,

Le plus simple de ne serait-il pas de faire faire ce traitement par la macro vba??
Pour faire ce style de traitement, j'utiliserai des modules de classe. ce qui permet de travailler en utilisant les arbres.

je suis en train de plancher sur cet solution...
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Richard30 :), @tbft ;),

Une piste au marteau pilon sans aucune subtilité avec des colonnes auxiliaires :
  • on convertit le tableau en tableau structuré
  • on y ajoute 10 colonnes avec pour intitulé "n1" à "n10"
  • en colonne "n1", on met la formule : =SIERREUR(RECHERCHEV([@Nom]; Tableau1[#Tout];6;FAUX);"")
  • en colonne "n2", on met la formule : =SIERREUR(RECHERCHEV([@n1]; Tableau1[#Tout];6;FAUX);"")
  • on copie cette dernière formule sur les colonnes "n3 "à "n10"
  • colonne "Niv Hierarc." la formule : =SOMMEPROD(--((NBCAR(Tableau1[@[n1]:[n10]])>0)*(Tableau1[@[n1]:[n10]]<>"")))
nota 1 : Si besoin, on peut ajouter des niveaux n11, n12, etc puis changer la formule en colonne "Niv Hierarc." pour tenir compte des nouvelles colonnes.

nota 2 : fonctionne avec les versions antérieures d'Excel - du moins toutes celles qui comportent des tableaux structurés (à/c d'Excel 2007 me semble-t-il)
 

Pièces jointes

  • Richard30- Classement Hierarchique Formule- v1.xlsx
    14.5 KB · Affichages: 5
Dernière édition:

tbft

XLDnaute Accro
Bonjour

Il faut mettre un point d'arrêt à la ligne contenant :"Liste_brute = Liste_entrée.Value" et afficher la fenêtre des variables locales.
Il faut ensuite ouvrir la cellule contenant la formule et la valider.
Normalement, Excel va lancer la function et vous pourrez suivre le déroulement.

En gros, il y a cinq temps majeurs
1) la lecture en récupérant le contenue du range passé en entrée de la function
2) transformation en une liste de personne (module de classe fait maison)
3) mise en place de l'arborescence de l'organigramme
4) transformation de l'arborescence en tableau
5) renvoi du tableau

Attention pour faire un tableau à dimension variable, celle la dernière dimension peut être variable. C'est pour cela que le code travail dans l'autre sens et utilise la fonction transpose pour le mettre dans le "bon" sens.

Au départ j'étais partis sur une macro à lancer avec un bouton ou autre. Puis, j'ai changé pour une function qui s'éxcécute comme une fonction native Excel.

Je vous invite à regarder et à me dire où vous bloquez.
 

Richard30

XLDnaute Nouveau
Bonjour

Il faut mettre un point d'arrêt à la ligne contenant :"Liste_brute = Liste_entrée.Value" et afficher la fenêtre des variables locales.
Il faut ensuite ouvrir la cellule contenant la formule et la valider.
Normalement, Excel va lancer la function et vous pourrez suivre le déroulement.

En gros, il y a cinq temps majeurs
1) la lecture en récupérant le contenue du range passé en entrée de la function
2) transformation en une liste de personne (module de classe fait maison)
3) mise en place de l'arborescence de l'organigramme
4) transformation de l'arborescence en tableau
5) renvoi du tableau

Attention pour faire un tableau à dimension variable, celle la dernière dimension peut être variable. C'est pour cela que le code travail dans l'autre sens et utilise la fonction transpose pour le mettre dans le "bon" sens.

Au départ j'étais partis sur une macro à lancer avec un bouton ou autre. Puis, j'ai changé pour une function qui s'éxcécute comme une fonction native Excel.

Je vous invite à regarder et à me dire où vous bloquez.
Bonjour,

J'ai effectué quelques essais en insérant des lignes sur le tableau de saisie des données et le tableau résultats se mets parfaitement à jour.
C'est tout simplement génial

Merci beaucoup
Bonne fin de journée
 

Discussions similaires

Statistiques des forums

Discussions
314 779
Messages
2 112 872
Membres
111 689
dernier inscrit
momowell