Insérer des lignes dans une arborescence
Bonjour,
Je suis nouveau sur le forum et je n'y connais rien du tout en vba.
Ma question porte à la fois sur l'analyse du problème et sur l'écriture du code pour le résoudre.
Voilà, j'ai un organigramme arborescent de tâches pouvant descendre jusqu'à huit niveaux.
Le niveau élémentaire est toujours le niveau 8.
Les autres niveaux sont forcément des niveaux de consolidation.
Sauf que les niveaux ne sont pas toujours construits de manière cohérentes (par exemple on peut passer directement d'un niveau 3 à un niveau élémentaire (8), puis retourner à un niveau 4 consolidant deux tâches élémentaires de niveau 8, remonter à un niveau 3, etc.) et j'ai besoin de réorganiser ma structure pour avoir cette cohérence car je veux ensuite envoyer la structure dans un outil de devis qui n'accepte que des structures strictement arborescentes.
Ce sera plus clair dans l'exemple du fichier joint.
J'ai mis deux exemples d'arborescences que je suis susceptible de récupérer, et comment je souhaite les modifier.
Je dois insérer des lignes dans l'arborescence pour créer des niveaux de regroupement intermédiaires et leur donner un libellé reprenant le non du parent + un identifiant à courir (dans l'exemple j'ai indiqué le nom du parent + NC (pour Niveau Consolidé) et un nombre incrémenté à chaque fois qu'une ligne est créée au sein d'un niveau parent.
Les arborescences peuvent avoir jusqu'à 4 voire 5000 lignes, c'est donc très fastidieux de repérer les niveaux mal structurés et les corriger un à un. Je ne dois pas modifier l'ordre initial des tâches (seulement ajouter des niveaux de consolidation quand c'est nécessaire).
Voilà, je suis très intéressé par vos conseils / méthodes pour parvenir à mes fins parce que là, je suis un peu comme une poule devant un couteau .... Merci d'avance pour votre aide
Bonjour,
la touche Entrée (ou Enter) se trouve à droite au-dessus de Maj.
eric
Bonjour Éric,
Vous avez dû faire une erreur de destinataire, ma question ne portait pas sur le sujet.
Bonjour,
Je ne te suis pas du tout dans tes niveaux de consolidation surajoutés ! Rien ne justifie ces rajouts...
Si l'on fait une analogie avec l'arborescence des dossiers et fichiers sur ton disque dur, ton niveau 8 est une unité élémentaire de contenu (équivalent à un fichier...), les autres niveaux sont des contenants, susceptibles de s'emboîter les uns dans les autres (équivalents à des dossiers, donc).
En ajoutant des niveaux, tu modifies une structure qui n'a rien de défectueux !
Cordialement.
Bonjour MFerrand
Merci pour ton intérêt. Tu as raison, ma structure n'a rien de défectueux, elle fonctionne très bien sous Excel, pas contre elle ne fonctionne pas dans l'application QDV dans laquelle je souhaite la transférer. QDV n'accepte une structure que si les tâches (dernier niveau d'une arborescence) sont toutes au même niveau au sein d'un niveau parent. Pour reprendre l'analogie avec les répertoires du disque dur, QDV n'accepterait pas d'avoir au même niveau des répertoires et des fichiers. Il faudrait que je mette les fichiers dans un répertoire pour n'avoir ainsi que des sous-répertoires de même niveau, et les fichiers à l'intérieur. Et avec la même contrainte, de manière récursive dans chacun des sous-dossiers.
Est-ce que c'est plus clair ?
Bonjour,
Vous avez dû faire une erreur de destinataire, ma question ne portait pas sur le sujet.
Indirectement si.
Tu colles des pavés qui ne donnent pas du tout envie de lire.
Aère ton texte et tu auras sans doute plus de réponses, il n'y en avait aucune lorsque je suis passé.
eric
Ahhhhhh!
ok
j'adhère
et j'aère
merci
Ah ben oui, c'est nettement mieux
Reste à absorber l'exemple maintenant.
Si tu n'avais eu que :
1 TOTO
8 Tâche A
8 Tâche B aurais-tu créé un ss-ensemble pour Tâche A,Tâche B ?
Même question pour des tâches non issues de la racine mais d'un niveau quelconque :
2 sous-ensemble TINTIN
8 Tâche G
8 Tâche H
2 sous-ensemble TOTO aurais-tu créé un ss-ensemble pour Tâche G,Tâche H ?
Et une dernière pour la route : la tâche de niveau 1 est-elle toujours unique sur un tableau ?
eric
Tu as raison, en essayant continuellement on va finir par y arriver
Dans le premier cas que tu cites : non, je n'aurai pas eu besoin de créer un sous-ensemble pour tâche A et tâche B, le fait que A et B soient au niveau 8 et la sous-ensemble au niveau 1 ne gêne pas.
Ce que je ne peux pas avoir à l'intérieur d'un ensemble c'est, au même niveau, des sous-ensembles et des niveaux terminaux de branches (cf analogie avec les répertoires et les fichiers dans le message de MFERRAND ci-dessus).
Et donc même réponse pour ta deuxième question : pas besoin de créer un sous-ensemble pour G et H car les sous-ensembles TINTIN et TOTO sont eux au même niveau, G et H appartenant à TINTIN.
Il reste la dernière question....
Mais je t'avoue que pour l'instant je ne sais pas par quel bout le prendre.
Bonjour,
QDV n'accepte une structure que si les tâches (dernier niveau d'une arborescence) sont toutes au même niveau au sein d'un niveau parent.
Ceci est une règle applicable, d'accord.
Mais alors tu ne l'appliques pas dans le 2e exemple de ton fichier, car au bout du compte une partie des tâches se trouve dans des ensembles de niveau 2, et une autre partie dans des ensembles de niveau 3, donc pas au même niveau !
En outre, dans tes deux exemples, il apparaît superflu de créer plusieurs regroupements au sein d'un même ensemble, un seul suffit pour répondre à la règle...
Si ce que tu édictes est bien la règle à appliquer, il suffirait donc dans un premier temps de détecter le niveau de profondeur maximal atteint par un ou plusieurs ensembles, puis de parcourir à nouveau l'arborescence pour trouver les tâches : si elles sont dans un ensemble niveau max requis, elles restent, sinon on crée le ou les ensembles nécessaires pour atteindre ce niveau max et y insérer les tâches...
Cordialement.
Exact ! la dernière pour la route. Eh bien non, il peut y avoir plusieurs niveaux 1, mais en fait on pourrait tous les raccrocher à un niveau parent (niveau 0) qui lui serait unique.
Si je reprends l'analogie des répertoires sous répertoires et fichiers, voilà ce à quoi j'avais pensé :
Je regarde dans un répertoire (= un ensemble A placé disons ligne 1) s'il y a à la fois des fichiers (des tâches de niveau "8") et des sous-répertoires (des sous-ensembles dont le niveau est compris entre le [niveau du répertoire A +1] et 7).
Si non, je peux passer à l'ensemble suivant
Si oui, alors il faut que je crée des sous-répertoires pour y mettre les fichiers qui sont directement à la racine.
Je commence à la première ligne sous l'ensemble A (ligne 2).
Si c'est un fichier (niveau "8") je crée un répertoire A1 : j'insère une ligne de niveau [niveau de l'ensemble +1] à la ligne 2. La ligne 3 est donc mon premier fichier.
Je passe à la ligne 4, est-ce un fichier ?
si oui je le laisse à cette place, il fait désormais partie du sous-ensemble A1 que je viens de créer.
si non, c'est un sous ensemble, je passe donc à la première ligne après ce sous-ensemble (puisque tous les fichiers ou sous-ensembles qui lui appartiennent ne sont pas directement raccrochés à la racine du répertoire A.
Est-ce que cette ligne est un fichier ou un répertoire, etc ...
il faut ensuite recommencer l'opération pour les niveaux inférieurs, et ainsi regarder dans chaque sous-répertoire déjà existant (inutile de regarder ceux que l'on vient de créer) s'il contient à son tour des fichiers et des sous-sous-ensembles à sa racine ... Bref c'est exactement le genre de truc que je ne sais absolument pas programmer
c'est preeeeesque ça.
dans l'exemple 1, je ne dois pas déplacer les tâches A et B (c'est un organigramme de tâches, leur enchainement suit une certaine logique, calendaire ou fonctionnelle par exemple), il faut donc que je fasse un premier niveau de consolidation pour les y ranger : TOTO_NC1, ensuite arrive TATA (on ne change rien), puis E et F qui doivent être regroupées sous TOTO_NC2 et enfin TINTIN(on ne change rien).
Si on fait des sous-totaux dans Excel (sous.total(9;lignes 1:13), alors TOTO (niveau 1) consolidera les sous-totaux de niveaux 2 (TATA, TINTIN, TOTO_NC1 et TOTO_NC2) eux-mêmes étant des sous-totaux des tâches qu'ils contiennent (chaque tâche = branche finale d'une arborescence, porte un coût dans le fichier définitif).
Dans le second exemple, hormis le fait que je ne souhaite pas déplacer l'ordre de A et B, ni E et F comme évoqué ci-dessus, il n'est pas nécessaire de créer un TOTO_NCniv3 car A, B, E et F sont déjà toutes au même niveau dans le groupe TOTO_NCniv2. Ceci dit si c'est plus simple de créer un TOTO_NCniv3, ce n'est pas gênant.
Au final les sous-totaux fonctionneront, TOTO_NCniv2 sera la consolidation des tâches A,B,E et F, et TOTO sera la consolidation des niveaux de rang inférieur (TATA, TINTIN et TOTO_NCniv2).
Oui désolé, j'ai un peu de mal à expliquer ce que je veux, mais vos questions ont le mérite de m'aider à formaliser mon besoin.
Merci en tout cas de vous intéresser au sujet.
Bonjour,
Je ne démarre jamais tant qu'une règle n'est pas clairement établie...
Ta règle, initialement exprimée comme : toutes les tâches doivent figurer au même niveau d'arborescence, devient caduque !
La règle serait en fait que des tâches ne peuvent coexister sur un même niveau simultanément avec un regroupement d'un quelconque niveau. Soit à chaque niveau on ne peut avoir que : ou bien exclusivement des tâches, ou bien des regroupements (par définition de même niveau).
La question de l'ordre des tâches à respecter est relativement secondaire, cela allonge la réorganisation, mais ne complique pas vraiment...
Si donc après examen la nouvelle règle est confirmée, il restera à indiquer la forme sous laquelle doit être produite la réorganisation envisagée. En termes pratiques, tu dis que tu dois la fournir à une application : sous quelle forme ? quel type de données ? etc.
Cordialement.
MFerrand a écrit :Bonjour,
La règle serait en fait que des tâches ne peuvent coexister sur un même niveau simultanément avec un regroupement d'un quelconque niveau. Soit à chaque niveau on ne peut avoir que : ou bien exclusivement des tâches, ou bien des regroupements (par définition de même niveau).
Oui, c'est exactement cela
Quant au transfert dans l'application QDV, j'utilise pour ce faire l'applicatif QDV Converter (développé spécifiquement pour faire le lien entre Excel et QDV). Ce convertisseur appelle le fichier excel qui s'ouvre directement dans QDV Converter exactement sous la même forme que dans Excel (en fait QDV a été développé autour d'objets Excel d'où une très forte compatibilité entre les deux applications). Donc si j'arrive à restructurer mon arborescence dans Excel, il n'y a pas de raison que Converter ne puisse pas transférer la structure dans QDV.
Très bien ! Mais ignorant tout de QDV, la chose à savoir c'est que dans Excel on aura donc une arborescence décrite au moyen d'inscriptions textes dans des cellules : comment cela doit-il se présenter ? Un modèle ! et on le réalise... !
Ok, je prépare un petit exemple excel que j'envoie d'ici 20 minutes.
Merci !!!
Voilà un exemple simplifié de l'interface Converter. Dans le fichier joint j'ai représenté dans la zone gauche avec les croix et les deux lignes bleue et jaune les éléments natifs dans Converter. Quand on appelle le fichier excel à convertir il s'ouvre dans la zone grisée (la cellule A1 du fichier Excel se retrouvant alors dans la colonne J3 de Converter. On indique ensuite à converter quelle colonne du fichier Excel doit être renvoyée dans quel champ de la base de donnée QDV (mapping). Il y a deux tables QDV à utiliser : l'une pour les arborescences, l'autre pour les tâches élémentaires. Dans l'exemple le libellé qui se trouve dans la colonne "tâche" du fichier excel sera renvoyé dans le champ "Descriptif" de la table WBS de QDV si la tâche est associée à un niveau entre 1 et 7, ou bien sera renvoyé dans le champ "Descriptif" de la table des tâches élémentaires de QDV si la tâche est associée à un niveau 8 (en fait identifiée comme tâche terminale d'un noeud de l'arborescence.
Nota : dans mon fichier d'origine (avant retraitement) les numéros de niveaux ne se suivent pas toujours correctement. Par exemple il peut y avoir un niveau 1 suivi par un niveau 3 et sans niveau 2, ce qui n'est pas cohérent. Le mieux dans ce cas est de remonter le niveau 3 au niveau 2. Il suffit (? vite dit ?) de le renommer 2 dans la colonne niveau du fichier Excel, et QDV le créera correctement au niveau 2.
ça se clarifie ????
On va voir !

