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:
Capture d’écran 2020-03-09 à 21.33.56.png


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:
Capture d’écran 2020-03-09 à 21.33.48.png



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

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
Capture1.JPG



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
Capture.JPG


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

Discussions similaires

Réponses
9
Affichages
337

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla