Bon j'ose faire un copié/collé de mon code Access même si je sais que l'on est sur un forum dédié à Excel ...
donc ma création d'arbre est basée sur une fonction récursive qui utilise des requetes dans access qui dépendent les unes des autres
Michel: j'ai peut etre exagéré sur le nombre ... je pense au max j'ai 1500-2000 noeuds dans mon arbre ...
'********************************************************
'* fonction de recopie de l'arbre dans excel ...
'********************************************************
Private Sub Commande26_Click()
'afficher l'architecture d'un Treeview dans une feuille Excel
Dim arbre As TreeView
Dim i As Integer
Dim Tableau() As Variant
Dim Xcel As Excel.Application
Dim classeur As Excel.Workbook
Dim feuille As Excel.Worksheet
Dim chemin As String
chemin = CurrentProject.path
Set arbre = Me!tree.Object
Set Xcel = CreateObject("Excel.Application")
Set classeur = Xcel.Workbooks.Open(chemin & "fic.xls", ReadOnly:=False)
ReDim Tableau(arbre.Nodes.Count, 3)
For i = 1 To arbre.Nodes.Count
Tableau(i - 1, 0) = arbre.Nodes(i).Index
Tableau(i - 1, 1) = arbre.Nodes(i).Key
Tableau(i - 1, 2) = arbre.Nodes(i).Text
Next i
classeur.Sheets("sheet1").Range("A1:" & Cells(arbre.Nodes.Count, 3).Address) = Tableau()
classeur.Save
classeur.Close
End Sub
'********************************************************
'* remplissage de l'arbre ...
'********************************************************
Function DetailMontage(montageOri As String, objNode As Node, lstMontages() As Variant _
, lstSousEns() As Variant, lstPtus() As Variant, idDb As DAO.Database, arbre As TreeView _
, i As Long, j As Long, k As Long, l As Long)
On Error GoTo erreurFct
Dim clients, montages, res, compoToptu, ptuTocomposant, compoTomontage As DAO.Recordset
Dim libListeMontages, libListePtus, libListeSousEns As String
'** liste contenant les montages, ptus et sous ensemble
' a ne pas réintérroger lors de la boucle ... **
'****************Maj liste de montages ******************
ReDim Preserve lstMontages(UboundEX(lstMontages) + 1)
lstMontages(UboundEX(lstMontages) - 1) = montageOri
libListeMontages = ListingDeTableau(lstMontages)
Set res = idDb.OpenRecordset("SELECT numPiece FROM [%piece%montage] " _
& "where numMontage = '" & montageOri & "' and numPiece not in ('" & libListeSousEns & "')")
While Not res.EOF
'**************** Maj liste des sous/ens *****************
ReDim Preserve lstSousEns(UboundEX(lstSousEns) + 1)
lstSousEns(UboundEX(lstSousEns) - 1) = res!numPiece
libListeSousEns = ListingDeTableau(lstSousEns)
arbre.Nodes.Add "MontageNo_" & montageOri, tvwChild, "SousEnsNo_" & j, j & " - " & res!numPiece
arbre.Nodes("SousEnsNo_" & j).BackColor = 16744448
Set compoToptu = idDb.OpenRecordset("SELECT noProduit FROM RESULT_RQ_DECOMPO_INVERSE " _
& " WHERE noComposant= '" & res!numPiece & "' and noProduit not in ('" & libListePtus & "') ")
While Not compoToptu.EOF
DoEvents
'If EltDansListe(compoToptu!noProduit, lstPtus) = False Then
'****************Maj liste des ptus ********************
ReDim Preserve lstPtus(UboundEX(lstPtus) + 1)
lstPtus(UboundEX(lstPtus) - 1) = compoToptu!noProduit
libListePtus = ListingDeTableau(lstPtus)
arbre.Nodes.Add "SousEnsNo_" & j, tvwChild, "PtuNo_" & k, k & " - " & compoToptu!noProduit
arbre.Nodes("PtuNo_" & k).BackColor = RGB(255, 255, 128)
Set ptuTocomposant = idDb.OpenRecordset("SELECT noComposant FROM RESULT_RQ_DECOMPO " _
& " WHERE noProduit= '" & compoToptu!noProduit & "' and noComposant not in ('" & libListeSousEns & "') ")
'Else
' arbre.Nodes.Add "SousEnsNo_" & j, tvwChild, "_PtuNo_" & k, compoToptu!noProduit & " - " & "res" & j
' arbre.Nodes("_PtuNo_" & k).BackColor = RGB(0, 0, 0)
' arbre.Nodes("_PtuNo_" & k).ForeColor = RGB(255, 255, 128)
'End If
While Not ptuTocomposant.EOF
DoEvents
'If EltDansListe(ptuTocomposant!NoComposant, lstSousEns) = False Then
'**************** Maj liste des sous/ens *****************
ReDim Preserve lstSousEns(UboundEX(lstSousEns) + 1)
lstSousEns(UboundEX(lstSousEns) - 1) = ptuTocomposant!NoComposant
libListeSousEns = ListingDeTableau(lstSousEns)
'***************************************************
arbre.Nodes.Add "PtuNo_" & k, tvwChild, "NoSousEnsBis_" & l, l & " - " & ptuTocomposant!NoComposant
arbre.Nodes("NoSousEnsBis_" & l).BackColor = 16744448
Set compoTomontage = idDb.OpenRecordset("SELECT montage.numMontage,montage.designMontage FROM [%piece%montage],montage " _
& "where numPiece = '" & ptuTocomposant!NoComposant & "' and [%piece%montage].numMontage not in ('" & libListeMontages & "') and [%piece%montage].numMontage=montage.numMontage")
'Else
' arbre.Nodes.Add "PtuNo_" & k, tvwChild, "_NoSousEnsBis_" & l, l & " - " & ptuTocomposant!NoComposant
' arbre.Nodes("_NoSousEnsBis_" & k).ForeColor = RGB(255, 255, 128)
'arbre.Nodes("_NoSousEnsBis_" & l).BackColor = 16744448
'End If
While Not compoTomontage.EOF
DoEvents
'arbre.Nodes.Add "decompo" & l, tvwChild, "Mont_" & compoTomontage!numMontage, compoTomontage!numMontage & " - " & "decompo" & l & " - " & i
If EltDansListe(compoTomontage!numMontage, lstMontages) = False Then
arbre.Nodes.Add "NoSousEnsBis_" & l, tvwChild, "MontageNo_" & compoTomontage!numMontage, compoTomontage!numMontage & " - " & compoTomontage!designMontage
arbre.Nodes("MontageNo_" & compoTomontage!numMontage).BackColor = RGB(0, 0, 0)
arbre.Nodes("MontageNo_" & compoTomontage!numMontage).ForeColor = RGB(255, 255, 255)
Call DetailMontage(compoTomontage!numMontage, arbre.Nodes("MontageNo_" & compoTomontage!numMontage), _
lstMontages, lstSousEns, lstPtus, idDb, arbre, i + 1, j + 1, k + 1, l + 1)
Else
arbre.Nodes.Add "NoSousEnsBis_" & l, tvwChild, "_MontageNo_" & compoTomontage!numMontage, compoTomontage!numMontage & " - " & compoTomontage!designMontage
arbre.Nodes("_MontageNo_" & compoTomontage!numMontage).ForeColor = RGB(0, 0, 0)
arbre.Nodes("_MontageNo_" & compoTomontage!numMontage).BackColor = RGB(255, 255, 255)
End If
i = i + 1
compoTomontage.MoveNext
Wend
compoTomontage.Close
ptuTocomposant.MoveNext
l = l + 1
Wend
ptuTocomposant.Close
compoToptu.MoveNext
k = k + 1
Wend
compoToptu.Close
res.MoveNext
j = j + 1
Wend
res.Close
erreurFct:
'
'MsgBox montageOri
'MsgBox Err.Description
Resume Next
End Function