Insérer des lignes dans une arborescence
hum ! Rougail saucisses ?
bah tout façon la cuisine c'est comme le VBA, faut connaitre les bases et avoir de l'imagination pour bien les utiliser, non ?
bon appetit !
Pas très loin !!
Par contre la solution de ta question est un peu plus épineuse et je vais la laisser mûrir jusqu'à demain !
On voit bien ce qui est à modifier, mais le point clé c'est le niveau de détection dans le cours de la procédure et les critères sur lesquels on l'appuie. Sachant aussi que l'on peut avoir à insérer des lignes (et le cas échéant en supprimer), ce qui plaiderait en faveur d'une boucle remontante, mais je sens mieux la détection dans une boucle descendante...
Je pense faire un premier balayage pour éliminer les écarts de deux niveaux (ou plus) dans le sens croissant (que tu évoquais), qui perturberaient l'algorithme de base. Eventuellement, les anomalies aux bornes (début sur un tâche sans niveau défini ou fin sur un niveau sans tâche) pour le cas où l'algo ne pourrait les traiter dans les mêmes conditions que les autres.
Je pense tenir un traitement applicable à ton exemple, mais il faut encore s'assurer qu'il peut traiter tous les autres cas de figures susceptibles de survenir.
A cet égard, tes premiers exemples présentaient des cas impossibles dans le cadre de ta présentation actuelle (double manquant sur un même niveau !). On ne peut avoir de niveau manquant que pour les tâches qui suivent immédiatement un niveau si ensuite on passe sur un niveau supérieur au lieu d'un niveau égal ou inférieur...
A suivre. Bonne fin de soirée.
Bonjour,
Pour rendre le sujet un peu plus concret, je te joins un fichier représentatif de ce que je dois retraiter. Il s'agit en fait de 3 fichiers d'arborescences de tâches qui ont été mis l'un à la suite de l'autre. Cela constitue la "donnée brute" telle que je la reçois que je dois retraiter. Les fichiers sont séparés par des lignes identifiées "C" (pour Commentaires) dans la colonne A (mais on peut aussi trouver des lignes C au sein d'un fichier). Il faudrait que la procédure ignore ces lignes (on ne les transfère pas dans QDV).
Les structures des fichiers 1 et 2 sont à peu près "propre" (je crois qu'il n'y a pas de travail à entreprendre pour réorganiser les niveaux). Par contre le fichier 3 (à partir de la ligne 1215 est concerné par ce besoin (exemple lignes 1248 à 1269 ou 1575 à 1586).
Pour des raisons de confidentialité, j'ai remplacé les textes par XXX partout où il y en avait. Par exemple les libellés des niveaux N2 se trouvent dans la colonne C et toutes les tâches de niveau terminal se trouvent dans la colonne J avec le code T dans la colonne A.
La colonne A ne peut prendre que l'une des valeurs suivantes : vide, 1 à 8, T ou C.Et donc j'en profite pour corriger une erreur de ma part, le niveau terminal n'est pas 8 comme je l'ai écrit dans mes précédents messages, mais 9
J'ai également mis quelques formules de sous-totaux entre les lignes 7 et 51 juste pour l'exemple.
PS : également très intéressé par la recette du punch combava
Bonne journée
Bonjour,
Tu fais bien de me fournir ce nouveau fichier ! La présentation m'a l'air de pouvoir faciliter le traitement...
Mais as-tu comme ici plusieurs fichiers susceptibles de se présenter à la suite ?
Cela ne devrait sans doute pas gêner le traitement, mais il vaut mieux s'en assurer.
Il ne me reste qu'à écrire la procédure et vérifier qu'elle fonctionne !
Punch combava : facile ! Tu dézestes 2 combavas (vu la structure du fruit, un dézesteur est l'instrument le plus efficace, si tu en disposes...) que tu mets à macérer dans un litre de rhum durant 24 heures. Ensuite, tu filtres, tu ajoutes 1/2 litre de sirop de canne, tu mélanges, et tu as 1 litre 1/2 de punch... Eviter d'ajouter de la vanille (ou alors peu de temps avant de servir) car cela a pour effet de décolorer le punch (dont la jolie couleur verte est l'un des attraits en sus de la saveur et de l'arôme...) Se boit glacé. Se conserve assez longtemps (le cas échéant !
Cordialement.
Bonsoir
Désolé pour la réponse tardive (j'espère qu'il restait du punch pour attendre).
En fait je reçois des fichiers excel de plusieurs contributeurs, tous avec un nombre et un positionnement différent de colonnes à droite de la colonne "coût" dans mon dernier fichier. En revanche les premières colonnes (de A jusqu'à la colonne coût) sont immuables quel que soit le fichier.
J'ai une macro qui assemble ces fichiers en assurant la cohérence des colonnes à droite. A la fin du process je récupère un fichier identique à ce que j'ai donné dans mon exemple, avec les colonnes de droite en plus (que j'ai retirées car elles n'apportent rien pour l'exercice).
Merci pour la recette du punch, je n'ai plus qu'à trouver un billet d'avion pour aller chercher les combavas, et déguster sur la terrasse au soleil couchant - ouais ça doit pouvoir se faire.
Bonjour,
Je suis un peu confus
Mais j'ai emmené mes notes sur l'option que j'avais l'intention d'écrire avec moi
En attendant, si tu n'es pas dans un désert, tu ne devrais pas trop avoir de difficulté à trouver des combavas. Les rayons fruits exotiques des supermarchés en proposent fréquemment. Je n'en ai pas emmené avec moi et en ai trouvé (sans chercher, pour l'anecdote, exactement à l'adresse de l'immeuble où j'ai passé toute mon enfance ! L'ancienne épicerie est désormais remplacée par une boutique spécialisée en produits de diverses origines, et le plus drôle c'est que j'y ai trouvé également des bouchons de La Réunion, ce qui pour le coup est nettement plus difficile que des combavas à trouver... !)
Cordialement.
Bonsoir,
J'ai pris un peu de temps pour examiner de plus près ton dernier fichier...
Le premier élément qui me pose quelques problèmes est la séparation des fichiers :
Peut-on s'appuyer sur les indications Premier fichier, Deuxième fichier, Troisième fichier figurant en col. J pour détecter les séparations de fichiers ?
J'avais pensé le cas échéant ne pas m'en soucier et traiter comme s'il s'agissait d'un seul fichier, mais cela peut poser problème !
En effet le 3e fichier débute par une tâche ! (ligne 1216). Si l'on ne tient pas compte des fichiers, elle sera considérée comme une tâche dans le regroupement de niveau 3 qui termine le 2e fichier. Alors que dans le 3e elle sera en anomalie et provoquera l'insertion d'un regroupement de niveau 1 pour l'y inclure.
Le deuxième élément réside dans les libellés, cela ne me gêne pas qu'ils soient tous remplacés par XXX, mais comme rien ne les distingue cela risque de provoquer des erreurs d'interprétation ultérieures sur ce qui a été fait.
En tout cas mon souci à cet égard était de savoir s'il convenait de s'en occuper (et aussi de savoir si ton remplacement par des XXX avait été tout à fait conforme...
Exemples : des tâches sans libellés ! (lignes 251 à 263, ligne 433, ligne 1214...). Mon premier réflexe est que cela n'a pas lieu d'être, et donc qu'il convient de les supprimer purement et simplement !
Autre exemple : un libellé en J pour un niveau de regroupement, doublant le libellé du niveau dans sa colonne (lignes 543, 558, 587, 601, 615, 621, etc.). Suppression du libellé en J !
Le troisième élément concerne les sauts de niveaux. J'avais envisagé de les réduire (dès le départ par un premier balayage du fichier).
Exemple : niveau 6 (ligne 1249) dans un niveau 4, à passer automatiquement en niveau 5, et niveau 8 (ligne 1250) dans le niveau 6 précédent devenu niveau 5, passerait alors en niveau 6... (Les libellés seraient repositionnés en conséquence.)
Mais comme ce décalage pourrait être également réduit par l'insertion des niveaux manquants, je pense qu'il convient de confirmer la conduite à tenir.
Un quatrième élément est posé par les niveaux dépourvus de tâches (nombreux dans le troisième fichier : lignes 1277 et 1278, 1346 à 1348, 1352 à 1356, 1361 et 1362, etc.). Ma position était également de les supprimer afin d'éliminer cette anomalie, mais n'étant pas sûr de l'avoir exprimé tout à fait explicitement, il me semble que cela doit être confirmé.
Je ne vois pas d'autre point de discussion pour l'instant, généré par le fichier, mais c'est déjà pas mal !
Une fois clarifié et arrêté ces points, si cela n'affecte pas le processus tel que je l'avais envisagé, je pensais faire un premier modèle test pour vérification : on ne procèderait pas d'emblée aux suppressions mais on se contenterait d'anoter les lignes supprimées de façon à pouvoir s'assurer de la cohérence du résultat par rapport à l'état initial...
Cordialement.
Bonsoir MFerrand
Impossibilité pour moi de répondre à mes messages pendant un peu plus d'une semaine. Désolé. Mais me voilà de retour.
J'ai fait quelques tentatives plus ou moins heureuses pour coder qqch pendant ce temps là. Bon c'est très approximatif et... ça ne marche pas, évidemment (je n'arrive pas à faire des regroupements corrects. ce n'est pas le but recherché mais je pensais que ça pouvait être un moyen d'arriver à une solution
J'en ai récupéré un bout dans un des fichiers dans lesquels les données sont saisies (les fichiers élémentaires qui sont mis bout à bout ensuite). Ce bout de code sert à faire les regroupements par niveaux et sous-niveaux. De là j'ai essayé d'insérer une condition pour savoir s'il faut ou non insérer une ligne pour créer un niveau de consolidation.
En y réfléchissant mieux, le problème se simplifie (un peu) : il ne peut pas y avoir au pire qu'un seul sous-niveau à créer et il se situe juste au dessous du niveau parent.
pour répondre plus directement à tes interrogations :
Peut-on s'appuyer sur les indications Premier fichier, Deuxième fichier, Troisième fichier figurant en col. J pour détecter les séparations de fichiers ? NON pas aujourd'hui. Par contre, je peux insérer dans la macro qui concatène les fichiers une ligne spécifique entre deux fichiers (j'importe le premier fichier, je crée un ligne, je lance l'import du second fichier etc.)
En effet le 3e fichier débute par une tâche ! (ligne 1216). Si l'on ne tient pas compte des fichiers, elle sera considérée comme une tâche dans le regroupement de niveau 3 qui termine le 2e fichier. Alors que dans le 3e elle sera en anomalie et provoquera l'insertion d'un regroupement de niveau 1 pour l'y inclure. Exact, il faut tenir compte du rang du fichier.
En tout cas mon souci à cet égard était de savoir s'il convenait de s'en occuper (et aussi de savoir si ton remplacement par des XXX avait été tout à fait conforme...
Exemples : des tâches sans libellés ! (lignes 251 à 263, ligne 433, ligne 1214...). Mon premier réflexe est que cela n'a pas lieu d'être, et donc qu'il convient de les supprimer purement et simplement !
Autre exemple : un libellé en J pour un niveau de regroupement, doublant le libellé du niveau dans sa colonne (lignes 543, 558, 587, 601, 615, 621, etc.). Suppression du libellé en J !. En fait c'est un vrai bazar. Je pensais pouvoir utiliser les libellés (et les colonnes dans lesquelles ils se trouvent) pour aider à déterminer le rang de la ligne (libellé en colonne B = rang 1, en colonne C = rang 2 etc.). Mais selon les fichiers il peut y avoir du texte ajouté dans d'autres colonnes que la colonne représentant le rang. Pour simplifier le problème il faut considérer que le libellé "significatif" est celui qui se trouve sur la colonne n+1 correspondant au niveau n indiqué en colonne A. Le plus simple (à mon avis) serait d'insérer une colonne (entre A et B par exemple) et y ramener les libellés significatifs lors du traitement. Les autres colonnes restent alors telles quelles (avec ou sans libellé)
Le troisième élément... C'est effectivement une solution élégante : éviter les niveaux vides qui n'ont pas de sens. En fait c'est lors de la construction du fichier qu'on crée un niveau puis on s'aperçoit qu'il n'était pas justifié mais on le laisse. Résultat ça peut se lire mais ce n'est pas une construction rigoureuse et cela peut gêner les traitements automatiques.
Un quatrième élément est posé par les niveaux dépourvus de tâches (nombreux dans le troisième fichier : lignes 1277 et 1278, 1346 à 1348, 1352 à 1356, 1361 et 1362, etc.). Ma position était également de les supprimer afin d'éliminer cette anomalie, mais n'étant pas sûr de l'avoir exprimé tout à fait explicitement, il me semble que cela doit être confirmé. On peut les conserver si et seulement si ça ne complique pas le traitement du fichier sinon : suppression !
Bon, y a encore des courageux pour se coller au bouzin ???
Bonjour,
J'ai un peu de mal en ce moment à réaliser toutes les réponses à faire, mais je finirai bien par absorber le tout...
Bonne journée.
Salut Ceuzin !
Tu es sûr que tu ne te trompes pas de sujet ?
Ici, si l'on parle de niveaux, on n'est pas du tout dans un organigramme...
Cordialement.
Il s'agit d'arborescence (cf titre).
Une arborescence se définit dans une BD par des relations PERE/FILS (au lieu d'usines à gaz)
On peut ensuite exploiter cette BD pour en extraire ce que l'on veut.
http://boisgontierjacques.free.fr/pages_site/Recursivite.htm
Ceuzin
Il y a certes une analogie, des pères et des fils, potentiellement sur 8 générations. Et certains ont des biens qui leurs sont rattachés, mais seuls ceux dépourvus de fils ont des biens, et l'objectif est de compléter (positivement ou négativement) l'arborescence afin de respecter cette règle, ainsi que celle qu'il doit y avoir des biens sur chaque niveau terminal d'une branche...
Je regarderais donc de plus près ton fichier (mébon ! me faut un trou dans les affaires familiales pour me concentrer sur l'objectif !
Merci à toi !
Bonjour
Ta réponse ne correspond pas à ce que je cherchais initialement mais c'est très bien fait et ça me donne des idées pour des compléments à apporter à mon fichier. Merci beaucoup.