Indexation dossiers et sous-dossiers

12animaux.xlsm (33.37 Ko)

Bonjour,

Je souhaite modifier l'indexation de catégories et sous-catégories d'une arborescence.

Quelques explications avec l'aide de mon fichier "Animaux" en PJ.

- Par PowerQuery, j'ai exporté l'arborescence d'un dossier d'une classification hiérarchique des animaux, et scindé le chemin de chaque fichier par délimiteur "\".

Un code VBA (merci à l'aide du forum, au passage ) me permet de récupérer le nom de chaque dossier, dans l'onglet "Classification".

Maintenant, dans le but de créer des tables par catégorie et sous-catégorie, je dois réussir à indexer mes fichiers comme je l'ai fait à la main dans l'onglet "Objectif".

Par exemple, je souhaite par une formule excel ou un code VBA, que les éléments de "superclasse" soient indexés comme suit (idE, idS, nomSuperClasse) :

- 1.1. Crustacés

- 1.2. Insectes

- 2.1. Bivalves

- 2.2. Céphalopodes

Et ainsi de suite jusqu'au fichier, par exemple 3.2.2.1. => tortueverte.txt

Dans l'onglet "Classification", ce que j'ai fait à l'aide d'une fonction EQUIV, mais je ne sais pas comment faire, pour "réinitialiser" mon index.

J'espère avoir été clair dans ma demande, merci pour toute aide :)

Bonjour,

Personne n'a de piste ?

Merci

Bonjour,

J'avoue ne pas avoir tout tout bien compris mais comme j'arrive au résultat escompté sur la 1ère feuille (tableau vert) je post ici, au cas où :

Cdlt

Bonjour

Je ne suis pas certain d'avoir bien compris l'objectif mais voici une proposition.

4animaux-2.xlsm (46.43 Ko)

Bonjour,

Tout d'abord merci beaucoup Ergotamine et yal_excel pour vos contributions

Je vais essayer d'être plus clair. Pour mettre en place une petite base de données relationnelle, je souhaite extraire toutes les informations contenues dans un dossier de mon DD, notamment la hiérarchie des dossiers.

Voici dans l'onglet "Tab_class" les tables que je cherche à créer pour ma BDD. A chaque table correspond un niveau, ici pour la classification des animaux. De ce que j'ai compris de la conception des BDD et de l'identification des entités faibles en particulier (chaque sous-catégorie dépend d'une seule catégorie parente et ne peut exister que par son appartenance à celle-ci), il y a besoin de deux clés : une clé identifiante et une clé locale.

Par exemple, dans la table super_classe, la clé identifiante est IdE (celle de l'embranchement) et la clé locale est IdS. La clé permettant d'identifier la super_classe est la concaténation des deux. Je ne suis pas sûr à 100% mais je pense que c'est comme cela qu'il faut que je construise mes tables.

Du coup, je cherche un moyen de passer de mon tableau "Import" à la génération de mes index dans "Tab_class".

@Ergotamine : merci pour ta proposition. La seule chose qui me chagrine c'est qu'il n' y a pas de formule en I2 et J2 et en fait je ne sais pas comment faire pour gérer les cellules vides. J'aimerais une formule ou un code applicable à tout import d'arborescence.

@yal_excel : je vais regarder plus en détail, mais sauf erreur je n'arrive pas à l'indexation souhaitée par ta macro.

Merci encore,

6animaux-2.xlsm (34.13 Ko)

Bonjour Mango86,

Il vous suffirait de retirer les en têtes de mon tableau, et tirer I3/J3 en ligne 2. Je ne peux sommer du texte, d'où le fait que j'ai rentré les 1 à la main. Mais si ces cellules sont vides, pas de problème.

Il faut par contre que vos données soient triées par ordre alphabétique sur chaque colonne pour que les formules fonctionnent, comme dans l'exemple que vous avez joint.

Au vu de mes connaissances je ne pourrais faire mieux désolé.

Cdlt,

Bonsoir

Si j'ai mieux compris la question voici peut être une réponse

Lancer la procédure par clic sur bouton "Indexation 2" et les résultats sur la feuille "Résultats 2"

8animaux-2.xlsm (56.68 Ko)
3animaux-2.xlsm (50.40 Ko)

Bonjour,

Merci beaucoup yal_excel, on se rapproche

Je suis malheureusement très loin d'avoir le niveau nécessaire en VBA pour bien comprendre ta macro, je vais essayer ce week-end en mettant des points d'arrêts et en faisant du pas à pas, mais je ne promets rien.

Quant au résultat, ce que je souhaite obtenir, c'est comme dans mon onglet "Tb_class", des colonnes distinctes pour chacun des identifiants, les valeurs que prend idE vont de 1 à 3, idS 1 à 2, etc. Dans les colonnes B, F, K, O, tu as déjà concaténé les id et je n'en ai pas besoin pour l'instant (je pense pouvoir réussir à ajouter une colonne concaténer à côté si j'ai besoin).

Pour la tb_sclasse, il y a doit y avoir un petit décalage, idS doit prendre des numériques et "superclasse" le texte.

Merci !

@ Ergotamine

Désolé, je n'avais pas vu votre réponse. En fait, il y a quelque chose que je ne comprends pas.

La formule semble marcher, mais en essayant de la transposer pour un autre dossier (une autre requête), il me retourne un #VALEUR! car il fait le calcul " " + 1 . Du coup, je ne comprends pas pourquoi cela fonctionne dans "Animaux", puisqu'en K8, il devrait bien évaluer " " + 1.

Je me trompe quelque part ? Mon fichier avec l'onglet "Test" en PJ

Merci par avance

5animaux-test.xlsm (38.65 Ko)

Bonjour,

Oui vous avez raison le fait d'additionner une valeur vide avec un nombre provoque une erreur. On peut mettre un 0 à la place et jouer avec les formats personnalisés sur les cellules pour les masquer et la fonction SUBSTITUE pour les supprimer. C'est de la bidouille je le conçois mais ça donne le résultat escompté si on ne veut pas s'embarquer dans des formules trop complexes :

=SUBSTITUE(CONCATENER(I2;".";J2;".";SI(K2<>"";K2&".";"");SI(L2<>"";L2&".";""));"0.";"")

et le fichier qui va avec.

Cdlt,

Voila qui devrait s'approcher encore du résultat souhaité

10animaux-2.xlsm (52.12 Ko)

Merci pour vos réponses

@Ergotamine D'accord, on peut s'en sortir en passant par un format personnalisé. Je suis toujours intrigué à savoir pourquoi cela fonctionnait sans ce formatage (O;;;) dans votre première proposition. Sinon, le résultat est bien celui auquel je souhaite parvenir.

@yal_excel Ca m'a l'air de fonctionner parfaitement, merci beaucoup ! Je vais regarder si ce code est adaptable pour une requête Power Query sur l'arborescence d'un dossier quelconque. Comprendre le fonctionnement me prendra du temps mais j'espère y arriver.

Bonjour,

Dans le premier exemple, les arborescences étaient complètes : pour chaque nouveau sujet d'un chemin, le chemin parent était forcément présent et le chemin 1 complet sur toute la colonne, donc le "" " n'était jamais aditionné. On le vois à l'architecture pyramidale des incrémentations. Ce qui change dans votre test c'est que des cellules sont vides sur le niveau supérieur.

Vous auriez très bien pu placer un espace à la place du vide et vous vous seriez retrouvé dans le même cas que dans la feuille import, c'est un autre bidouillage pour contourner le cas.

Nous aurions pu également placer ces formules sur la feuille Test :

=SI(D1<>D2;1;SI(B1<>B2;E1+1;E1)) 'En E2
=SI(E1<>E2;1;SI(C1<>C2;F1+1;F1)) 'En F2

Et tirer, mais des effets de bords seraient peut être apparus si vous aviez eu un chemin vide à un moment ou a un autre car la donnée aurait été automatiquement incrémentée, même si c'est vide.

La gestion des cellules vides sous Excel peut s'avérer embêtante lorsque l'on compare des données entre elles.

N'hésitez pas à passer le sujet en résolu pour améliorer la lisibilité du forum si vous avez trouvé votre réponse.

Cdlt,

Donc Excel peut retourner une valeur dans une formule imbriquée, comme en K8 par exemple (premier fichier, onglet "Import") : SI(D8="";"";SI(J8<>J7;1;SI(D7<>D8;K7+1;K7))), qui renvoie 1, alors que dans le dernier SI, K7+1 n'est pas évalué car K7 est vide. C'est ce que je n'avais pas compris.

Merci pour vos contributions, j'en ai appris un peu plus sur Excel grâce à vous. Je mets le sujet en résolu - je me permettrai d'en ouvrir un autre si j'ai des questions.

Rechercher des sujets similaires à "indexation dossiers"