Relation Père/fils pour arborescence à partir d'un tableau

Polobe36

XLDnaute Occasionnel
Bonjour à tous, le Forum,

Je souhaiterais à partir d'un tableau définir une relation père/fils pour créer une arborescence.
Pour une liste d'évènements sur nos lignes de production, on renseigne un symptôme, une cause, un remède et aussi une nature d'intervention. De ces informations, je souhaiterai en déduire un arbre de défaillance (trois en fait):

- un premier où l'on retrouvera la relation Symptôme/Cause/Remède;
- un second avec la relation Nature/Symptôme/Cause/Remède;
- le dernier à partir du Remède/Cause/Symptôme.

Je me suis servi du travail de BOISGONTIERJ sur La récursivité pour faire l'organigramme (l'arbre), mais mon besoin aujourd'hui se situe dans le fait de constituer automatiquement ces deux colonnes (père et fils).

Et pour compliquer la tâche, j'aurai besoin d'obtenir un résultat en fonction de plusieurs critères:
- >= à une date (critère obligatoire)
- <= à une date (critère obligatoire)
- Ligne de production (critère optionnel)
- Organe (critère optionnel)
- Imputation (critère optionnel)
- et le dernier en fonction de la valeur =1 d’une des colonnes en J:N (liste déroulante avec un choix unique) (critère optionnel)

Pour la racine de l’arbre on peut donner le terme de « arbre de défaillance ».

Je vous joins un document en pièce jointe dans lequel vous trouverez :
- Le tableau de départ
- L’arbre défaillance = résultat attendu à partir des critères renseignés dans le formulaire
- Les listes de choix pour le formulaire

Je me débrouille question formule, mais pour des cas comme celui-là, je pense que le mieux est de passer par du VBA et c’est là où mes compétences s’arrêtent.
C’est pourquoi, merci d'avance de votre aide, de vos idées.

Bonne journée à tous
 

Pièces jointes

  • Arbo1.xls
    654.5 KB · Affichages: 186
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Relation Père/fils pour arborescence à partir d'un tableau

Bonjour.
Je ne suis pas sûr de ce que vous voulez faire, mais utilisez mes Dictionnaires arborescents: ile se construisent en un seul appel à une fonction DictionnArbo du module MDictionnArbo de OutIdx. Il suffit de lui indiquer les colonnes de clés successives.
Remarque: Besoin aussi du module de classe TableIndex et de la référence "Microsoft Scripting Runtime".
Les colonnes Fils et Père qui mélangent les clés de plusieurs niveaux ne sert à rien. L'arboresscence établie d'après la feuille suivi sera simplement dans le dictionnaire. Et il existe un module de classe ComboBoxCasc que s'occuperait de tout dans un Userform si ça vous intéresse. Et un autre module de classe ComboBoxLié où c'est en quelque sorte l'usager final qui définit l'arbre selon l'ordre dans lequel il choisit de renseigner les ComboBox !
 
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : Relation Père/fils pour arborescence à partir d'un tableau

Bonjour Dranreb,

Tout d'abord merci de ton attention à mon problème. Bon... j'ai parcouru le fil de discussion dédié à ton outil et c'est bien là où mes compétences s'arrêtent: j'ai décroché et pas franchement compris comment çà marchais. Alors se serait vraiment cool si tu pouvais me guider un peu.
J'ai téléchargé le fichier et positionné dans un dossier de travail, par contre après je vois pas comment le mettre en application.

Merci de ton retour
 

Dranreb

XLDnaute Barbatruc
Re : Relation Père/fils pour arborescence à partir d'un tableau

Pour pouvoir l'utiliser en programme complémentaire dans un classeur, cocher, dans son projet VBA "OutIdx" dans la liste Références disponibles, menu Outils, Références…
Remarquez: il est aussi possible d'importer les modules nécessaires, quoique là j'ai l'impression que vous en utiliserez une bonne moitié !
Dessinez votre Userform avec des ComboBox pour les Choix, sauf les dates, et un bouton pour lancer la production d'un arbre. Je vous préviens: tout y sera classé par ordre alpha.
Dans la feuille listes, ne devraient plus avoir d'utilité celles dont les textes figurent dans une même colonne de suivi (inutile de pouvoir sélectionner quelque chose qui n'y figure pas, ou n'y figure plus en fonction d'autres choix)
Ah, et non plus le type d'arrêt: on peut le prendre des titres du suivi.
Hmmm… va pas être hyper simple tout ça…
Je prévois l'ajout nécessaire d'un tout petit dispositif dans le module MClassement pour préfiltrer les éléments à classer.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Relation Père/fils pour arborescence à partir d'un tableau

Important:
Laissez tomber pour l'Userform: je l'ai fait. Je joins ça pour que vous puissiez voir à quoi ça ressemble.
J'ai aussi mis les modules qu'il faudra, mais je n'ai rien écrit d'autre pour le moment.

P.S. J'ai ajouté de la programmation à présent dans le classeur joint.
 

Pièces jointes

  • OutIdxPolobe36.xls
    906 KB · Affichages: 187
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : Relation Père/fils pour arborescence à partir d'un tableau

Bonjour Dranreb, le Forum,

Un grand merci pour votre travail, très impressionnant! En toute sincérité j'ai pas tout compris mais le résultat répond tout à fait à mon besoin. Je vais donc pouvoir le mettre en application tout de suite, et creuser un peu tout çà pour essayer de comprendre son fonctionnement, voire même l'adapter (parce que en fait je voudrais créer d'autres arbres de ce type mais avec d'autres thèmes).

Encore merci, et bonne journée.
 

Dranreb

XLDnaute Barbatruc
Re : Relation Père/fils pour arborescence à partir d'un tableau

Bonjour.
Information.
Le plus gros de la complexité de l'ensemble vient de la nécessité de filtrer conjointement l'ensemble des données selon des critères qu'un objet ComboBoxLiés sait gérer tout seul (valeurs présentes dans certaines colonnes) avec d'autres qu'il ne sait pas gérer (moments compris entre deux dates, 1 présents dans une certaine colonne). Heureusement tout le monde parle le même langage, c'est à dire en terme de liste de numéros de lignes à retenir, et les filtrages selon de telles listes sont une technique bien éprouvée presque partout.
Vous aurez remarqué que la production d'un arbre est toute petite dans son coin, quasi indépendante, dans la procédure BtnGo-Click. Elle utilise une collection d'objets SsGroup, donc aussi une collection de collections de collections de collections etc., en quelque sorte, possible grâce au fait que la propriété Contenu d'un SsGroup est une collection, automatiquement fabriquée par la fonction GroupOrg. J'ai juste été obligé de rajouter un petit truc dans le module MClassement pour qu'elle sache aussi partir d'un extrait seulement des donnée, spécifié sous forme d'un table de Long indiquant leurs numéros de lignes.
Théoriquement tout devrait être expliqué pour faciliter l'utilisation, mais j'avais oublié de le faire pour cette procédure:
VB:
Sub Préfiltrer(ByVal TL)
Rem. —— Cette procédure obligera ultérieurement TbIdxTVcd à se baser sur la table de numéros de lignes spécifiée
'      au lieu de s'en construire une contenant tous les numéros de lignes du tableau qui lui sera fourni.
'      Veillez à ce que les numéros de lignes soient compris dans les limites de sa 1ère dimension.
'      Quasiment toutes les procédures de ce module sont prévenues de ce filtre à appliquer le moment venu.
'      Pour annuler son effet, rappelez cette procédure en spécifiant autre chose qu'une table d'entiers Long.
Préfiltré = TypeName(TL) = "Long()"
If Préfiltré Then TLgnFlt = TL Else Erase TLgnFlt
End Sub
N'hésitez pas à me demander des précisions si l'ordre dans lequel vous découvrez ces commentaires n'aurait pas la chance de vous permettre de comprendre rapidement, donc dans l'ordre qui vous serait approprié pour cela, ou si la combinaison des facultés de chaque pièce ne vous permet de comprendre celles de l'ensemble.
 

luisa526

XLDnaute Nouveau
Re : Relation Père/fils pour arborescence à partir d'un tableau

Merci pour votre apport que je trouve super mais j'ai du mal à tout comprendre! help me please :)

Actuellement, je me suis vue confier la réalisation d'un petit programme sous vba permettant de generer un organigramme selon un tableau renseigné sur excel.

Je me suis donc base sur l'un des exemples de "BOISGONTIER" sur La récursivité comme vous, où dans l'une des colonnes on a le parent et l'autre le fils. Cela dit, il faut toujours avoir un big boss pour que ça marche. c'est la où je suis bloquer car on me demande de pouvoir faire ceci:

1) Dans le fichier organigramme, gérer les "multi-chefs" en faisant une boucle sur le nombre de chefs trouvés :
- A) Vérifier le nombre de chefs du fichiers : scanner toutes les lignes du fichier - si la colonne critère 2 correspondant à une valeur critére 1 n'apparaît pas dans la colonne critère 1, alors on a à fair eà un chef et la valeur critère 1 est à rajouter dans un "tableau des chefs"
B) Faire une boucle sur le "tableau des chefs" pour effectuer un organigramme pour chaque chef.

Rem : penser à faire en sorte que ca marche aussi pour un chef "seul" (sans subordonnés) : seule sa case s'affiche ...

2) Penser à vérifier après la sélection du critère 1 qu'il n'existe pas de lignes "vides" dans la colonne critère 1 (empêchant une boucle "tant que ... cell.value <> '' ")


Je suis un peu bloque sur l'histoire des "multi-chefs", si vous pourriez me donner une piste de comment pouvoir gèrer ce nouveau paramètres ça serait super!!!

En tout cas merci beaucoup pour tout vos apports sur le Forum, ça m'a vraiment beaucoup aide!

Cordialement,

Luisa
 

Pièces jointes

  • orga_v4.xlsm
    80.8 KB · Affichages: 118
  • liste_test.xlsm
    9.8 KB · Affichages: 104
  • orga_v4.xlsm
    80.8 KB · Affichages: 96
  • liste_test.xlsm
    9.8 KB · Affichages: 83

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 013
dernier inscrit
cicro