Transformation de données d'arbre à tableau complet Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
U
UnProblemeAResoudre
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 25 janvier 2016
Version d'Excel : 2010

Message par UnProblemeAResoudre » 25 janvier 2016, 22:28

Bonjour à tous!

J'ai un problème que je n'arrive pas à résoudre.

J'ai un arbre avec des catégorie

Categorie 1
Sous categorie 1-1
Sous categorie 1-2
Sous categorie 1-3
Sous categorie 1-4
Sous categorie 1-5
Sous categorie 1-6
Sous categorie 1-7
Sous categorie 1-8
Sous categorie 1-9
Sous categorie 1-10
Categorie 2
Sous categorie 2-1
Sous categorie 2-2
Sous categorie 2-3
Sous categorie 2-4
Sous categorie 2-5
Sous Sous categorie 2-5-1
Sous Sous categorie 2-5-2
Sous Sous categorie 2-5-3
Sous Sous categorie 2-5-4
Sous Sous categorie 2-5-5


Etc...

Que je voudrais tranformer en une suite d'éléments finaux:

Categorie 1 Sous categorie 1-1
Categorie 1 Sous categorie 1-2
Categorie 1 Sous categorie 1-3
Categorie 1 Sous categorie 1-4
Categorie 1 Sous categorie 1-5
Categorie 1 Sous categorie 1-6
Categorie 1 Sous categorie 1-7
Categorie 1 Sous categorie 1-8
Categorie 1 Sous categorie 1-9
Categorie 1 Sous categorie 1-10
Categorie 2 Sous categorie 2-1
Categorie 2 Sous categorie 2-2
Categorie 2 Sous categorie 2-3
Categorie 2 Sous categorie 2-4
Categorie 2 Sous categorie 2-5 Sous Sous categorie 2-5-1
Categorie 2 Sous categorie 2-5 Sous Sous categorie 2-5-2
Categorie 2 Sous categorie 2-5 Sous Sous categorie 2-5-3
Categorie 2 Sous categorie 2-5 Sous Sous categorie 2-5-4
Categorie 2 Sous categorie 2-5 Sous Sous categorie 2-5-5
Categorie 2 Sous categorie 2-6
Categorie 2 Sous categorie 2-7

Mais je n'arrive pas à le faire...

Quelqu'un saurait-il m'indiquer comment procéder?
Cet algorithme rentre dans un autre algorithme qui fait plein de traitements mais je bloque sur celui ci...

Ci joint le fichier avec deux onglets l'onglet de départ et celui d'arrivée!

Je vous remercie pour votre aide précieuse!
E
Transformation.xlsx
(12.02 Kio) Téléchargé 43 fois
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5'546
Appréciations reçues : 221
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 25 janvier 2016, 23:37

Bonsoir,

un essai qui fonctionne...
Transformation_LouReeD.xlsm
(17.92 Kio) Téléchargé 45 fois
A vous de regarder comment ça marche ;-)
Ceci dit, comme toujours il y a certainement plus simple....

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'685
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 25 janvier 2016, 23:44

Bonjour,

et un autre... :-)
eric

PS: ben si elle est simple LouReed :-)
Transformation.xlsm
(22.18 Kio) Téléchargé 38 fois
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
U
UnProblemeAResoudre
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 25 janvier 2016
Version d'Excel : 2010

Message par UnProblemeAResoudre » 25 janvier 2016, 23:51

Bonsoir Messieurs,

Merci beaucoup!

J'ai oublié de préciser qu'il peut y avoir plus de trois colonnes bien entendu... disons quinze sous catégories!

Si vous pouviez commenter et expliquer votre code.. les trucs récursifs je ne les comprend pas trop..

En tout cas j'essaie de comprendre et vous remercie mille fois!
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5'546
Appréciations reçues : 221
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 25 janvier 2016, 23:52

Bonsoir eriiic,

je crois que définitivement que je n'arriverai à "pondre" un code comme le votre !
En le voyant ça fait pro, j'en ai marre d'être incapable de faire mieux que mes codes alambiqués !!! :lol:

Aller bonne fin de soirée à vous et @ bientôt

LouReeD

Sur le mien il suffit dans la boucle for next de mettre le nombre de colonne -1 et de rajouter fin au niveau de la dernière ligne +1 en colonne A.
Après si la colonne max doit être une variable il se peut qu'avec un UsedRange... ou un truc comme cela.....

@ bientôt

LouReeD

Les commentaires :
Sub allonsy()
    Dim ligne As Long ' numéro de la ligne en cours de test
    Dim ligne_a_sup As Long ' numéro de la ligne à supprimer
    Dim mem As Boolean ' y a t il une ligne à supprimer en mémoire vrai faux
    For colonne = 1 To 2 ' de la colonne 1 à la colonne X-1
        ligne_a_sup = 0 ' pas de ligne à supprimer
        ligne = 1 ' on commence le test en ligne 1
        Do ' on commence une boucle indéterminée
            If Cells(ligne, 1).Value = "fin" Then Exit Do ' si on arrive à la ligne où le mot fin est inscrit alors on quite la boucle
            If Cells(ligne, colonne).Value = "" Then ' si la cellule testée est vide
                If mem = False Then ' s'il n'y a pas de ligne à supprimmer
                    mem = True ' alors il y en a une
                    ligne_a_sup = ligne - 1 ' la ligne à supprimer est celle d'avant car sur la ligne actuelle la cellule est vide
                End If
                Cells(ligne, colonne).Value = Cells(ligne - 1, colonne).Value ' on remplie la cellule vide avec la valeur de la cellule d'avant
            Else ' si la cellule testée n'est pas vide
                If ligne_a_sup > 0 Then ' s'il y a une ligne à supprimer
                    Cells(ligne_a_sup, colonne).EntireRow.Delete ' on supprime
                    mem = False ' on a supprimer du coup on a plus de ligne à supprimer en mémoire
                    ligne_a_sup = 0 ' on initialise le numéro de ligne à supprimer
                    ligne = ligne - 1 ' comme on a supprimer une ligne on recommence le teste une ligne au dessus car suite à la suppression toutes les lignes sont remontées
                End If
            End If
            ligne = ligne + 1 ' on teste la ligne suivante
        Loop ' on boucle
    Next colonne ' on teste la colonne suivante
End Sub
Bonne soirée

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
U
UnProblemeAResoudre
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 25 janvier 2016
Version d'Excel : 2010

Message par UnProblemeAResoudre » 26 janvier 2016, 00:07

Merci Lou, je comprends mieux.. En testant, le code ne marche que pour trois colonnes... je vais essayer de l'adapter, en tout cas il marche pour l'exemple!

Pour ce qui est du code d'Eric, il ne marche pas puisqu'il avale la catégorie 6.. et de plus je n'y comprends pas grand chose..

Je cherche toujours quelque chose qui marcherait pour toutes configurations et autant de sous catégories que l'on veut.. le but étant de construire un tableau dans lequel j'aurais tous mes "Dernières catégories" (fin d'arbres) pour ensuite créer un word et remplir uniquement les sous cqtégories qui existent.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'203
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 janvier 2016, 00:15

Bonjour,

M'y étant penché, je livre ma version... !
Bien qu'ayant l'air différente de celle de LouReed (Hello !) le principe utilisé est le même il me semble.

Cordialement.

Oh ! foule de messages qui m'étaient passés sous le nez...

Qu'est ce que ce pessimisme LouReed ? Il se tient très bien ton code !

La variabilité du nombre de colonnes, il valait mieux l'indiquer avant !
Je regarde si je peux l'adapter...
__Transformation.xlsm
(24.02 Kio) Téléchargé 18 fois
U
UnProblemeAResoudre
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 25 janvier 2016
Version d'Excel : 2010

Message par UnProblemeAResoudre » 26 janvier 2016, 00:34

Bonsoir MFerrand,

Merci pour ta solution qui est très bien!

Je vais essayer de m'inspirer de vos trois codes pour en construire un qui puisse marcher pour tout nombre de colonnes et pour toute structure!

Je vous suis très reconnaissant de vous y être penché !

Si vous veniez à avoir d'autres idées je suis prenneur, sinon j'essaierais de faire un post plus précis, je n'avais pas pensé que ma question n'était pas claire :P!

Bonne nuit à vous,
E
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'203
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 janvier 2016, 00:38

Re,

Assez simple à adapter finalement...
A+
__Transformation(2).xlsm
(24.47 Kio) Téléchargé 32 fois
U
UnProblemeAResoudre
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 25 janvier 2016
Version d'Excel : 2010

Message par UnProblemeAResoudre » 26 janvier 2016, 00:45

C'est exactement ce que je voulais!

Il ne me reste plus qu'à déchifrer!

n,i,k,h des variables tellement parlantes hahaha

Merci beaucoup!

Si l'envie d'y glisser quelques commentaires te vient je suis prenneur!

Bien à toi,
E
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message