Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Excel arborescence

joan1211

XLDnaute Nouveau
Bonjour apres des heures de recherche, je sèche...
Je souhaiterai créer un tableau avec une arborescence.
j'ai vu que Excel était équipé de la fonction données/groupées et cela donne:


Cependant, je ne souhaite pas ce style.
J'ai l'espoire qu'il soit possible de créer un tableau avec ce genre d'arborescence:



En pièce joints, une (très petite) partie du classeur excel. Le fichier ne montre que 3 niveaux d'arborescence, mais je souhaiterais en avoir 5.

J'imagine qu'il est possible de s'en sortir avec du VBA, cependant je n'ai jamais codé.
Si une personne avait la solution et pourrait m'aider sur le codage..

Je vous en remercie par avance!

Joan
 

Pièces jointes

  • Essai.xlsx
    9.6 KB · Affichages: 12

eriiic

XLDnaute Barbatruc
Bonjour à tous,

en présentant tes données sous forme d'une BDD acceptable, tu peux le faire avec un TCD (voir Feuil2).
eric
 

Pièces jointes

  • ESSAI.xlsx
    15.2 KB · Affichages: 23

patricktoulon

XLDnaute Barbatruc
bonjour
ca va vous paraître complètement wouin wouin mais tout de même je donne ma méthode pour mettre en ordre une arborescence
etant plus a l'aise avec le html ou le xml je me sert de ces deux langage
j'ai donc repris un des classeur qui a été donné
celui ci



on constate que l'employé8 est dans la liste "A" avant son parent

perso je me dis
autant créer TOUT les élément "A" et les affilier après ,histoire de ne pas avoir un parent manquant dans une boucle filante (non récursive)

donc en html pour l'exemple et je précise que même si il y avait tout en désordre ça fonctionnerait quand même
voila donc en html ce que ça donne
on va le faire en mémoire il est nullement question d'ouvrir un explorateur quelconque

le code



VB:
Sub test()
   Dim dochtml,cel,ids,idparent
   Set dochtml = CreateObject("htmlfile")
    dochtml.body.innerhtml = ""
    Set div = dochtml.createelement("div")
    div.ID = [A2].Text
    dochtml.body.appendchild (div)
     With Range("A3", Cells(Rows.Count, "A").End(xlUp))

        'ajoute tout les element en vrac
        For Each cel In .Cells
            ids = Replace(cel.Text, " ", "_")
            Set div = dochtml.createelement("div")
            div.ID = ids
            dochtml.body.appendchild (div)
        Next
        'maintenant on fait les affiliations 
        For Each cel In .Cells
            ids = Replace(cel.Text, " ", "_")
            idparent = Replace(cel.Offset(, 1).Text, " ", "_")
            Set elementfils = dochtml.getelementbyid(ids)
            Set leparent = dochtml.getelementbyid(idparent)
            leparent.appendchild (elementfils)
        Next
        Debug.Print dochtml.body.innerhtml
    End With
voila a partir de ce moment on a une arborescence html conforme a la plage et ses données
parti de la il est facile de l'exploiter comme bon vous semble
visualisation pour la peine dans l'explorateur de document (console) juste pour vérifier


voila c'est pas très compliqué
vba exploite très bien le html et xml
 

Discussions similaires

Réponses
9
Affichages
357
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…