1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| Dim Cell As Range
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim Plage As Range
Dim i As Integer, x As Integer
Dim Cible As Integer
'La feuille qui contient le tableau
Set Ws1 = Worksheets("Feuil1")
'La feuille qui va recevoir l'arborescence
Set Ws2 = Worksheets("Feuil2")
Ws2.Cells.Clear
'La premiere ligne est reprise automatiquement
Ws2.Range("A1:B1").Value = Ws1.Range("A1:B1").Value
'Boucle sur la colonne A du tableau
For Each Cell In Ws1.Range("A2:A10")
'recupere le numero de la derniere ligne non vide dans la Feuil2
i = Ws2.Range("A1").CurrentRegion.Rows.Count
'Boucle sur les lignes de la Feuil2
For x = 1 To i
'Definit la plage qui contient des données
Set Plage = Ws2.Range(Ws2.Cells(x, 1), _
Ws2.Cells(x, Ws2.Cells(x, 1).End(xlToRight).Column))
On Error Resume Next
'Verifie si le noeud existe deja
Cible = Application.WorksheetFunction.Match(Cell, Plage, 0)
On Error GoTo 0
'si l'element (le noeud) est trouvé
If Cible > 0 Then
'Verifie si le noeud possède deja des enfants
If Cible = Ws2.Cells(x, 1).End(xlToRight).Column Then
's'il n'y a pas d'enfant
Ws2.Cells(x, Cible + 1) = Cell.Offset(0, 1)
Else
'S'il y a deja des enfants:
'Ajoute une ligne
Ws2.Rows(x + 1).Insert Shift:=xlShiftDown
Ws2.Cells(x + 1, Cible + 1) = Cell.Offset(0, 1)
Ws2.Range(Ws2.Cells(x + 1, 1), Ws2.Cells(x + 1, Cible)) = " "
End If
Exit For
End If
Next x
'Si l'element n'a pas ete trouvé dans l'arborescence
If Cible = 0 Then
Ws2.Cells(i + 1, 1) = Cell
Ws2.Cells(i + 1, 2) = Cell.Offset(0, 1)
End If
Cible = 0
Set Plage = Nothing
Next Cell |
Partager