Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mettre à jour un Treeview

1 réponse
Avatar
rmillerlcxl
Bonjour,

J'utilise un Treeview. Par un bouton =E2=80=A6 Par exemple =E2=80=A6 j'ajou=
te un document externe =C3=A0 un =C3=A9l=C3=A9ment du Treeview qui va se pl=
acer en retrait (donc un child je crois bien) en dessous de l'=C3=A9l=C3=A9=
ment.

Mon probl=C3=A8me est que je reproduit le Treeview au complet =C3=A0 chaque=
ajout. Et alors la macro MakeFamilyTree =E2=80=A6 voir ci dessous est lanc=
=C3=A9e.

Comment je pourrais faire pour mettre =C3=A0 jour que l'=C3=A9l=C3=A9ment s=
=C3=A9lectionn=C3=A9 et que donc dans le Treeview le texte de l'ajout puiss=
e aller se placer en dessous de celui-ci mais sans tout reproduire de z=C3=
=A9ro. Mon but est =C3=A9videmment que cela se fasse =C3=A9norm=C3=A9ment p=
lus vite. Est-ce possible d'=C3=A9viter le MakeFamilyTree?

Merci =C3=A0 l'avance.



'**************************************************************************=
*****

Sub MakeFamilyTree()

Dim arrName As Variant
Dim arrParent As Variant
Dim arrMatrix() As Variant
Dim arrTemp As Variant
Dim elm As Variant
Dim i As Long, j As Long
Dim ret As Variant
Dim Node As Node
Dim bExists As Boolean

'Reset Tree View control
UF_Treeview.TreeViewAvis.Nodes.Clear
=20
'Get data from the worksheet as an array
With Feuil3.Range("CN_TreeviewColAZone")
arrName =3D .Offset(0, 1).Value
arrParent =3D .Offset(0, 2).Value
End With
=20
'Sorting in an array
ReDim arrMatrix(1 To UBound(arrName), 1 To 1)
For Each elm In arrParent
i =3D i + 1
ret =3D Application.Match(elm, arrName, 0)
If IsError(ret) Then
arrMatrix(i, 1) =3D arrName(i, 1)
Else
j =3D 3
ReDim Preserve arrMatrix(1 To UBound(arrMatrix), 1 To j)
arrMatrix(i, 1) =3D arrName(i, 1)
arrMatrix(i, 2) =3D elm
arrMatrix(i, 3) =3D arrParent(ret, 1)
=20
Do
ret =3D Application.Match(arrParent(ret, 1), arrName, 0)
If IsError(ret) Then
Exit Do
End If
=20
If arrParent(ret, 1) =3D "" Then
Exit Do
End If
=20
j =3D j + 1
ReDim Preserve arrMatrix(1 To UBound(arrMatrix), 1 To j)
arrMatrix(i, j) =3D arrParent(ret, 1)
Loop
End If
Next
=20
arrTemp =3D CustomTranspose(arrMatrix)
=20
'Let's add each data to nodes
For i =3D 1 To UBound(arrTemp)
For j =3D 1 To UBound(arrTemp, 2)
If Not IsEmpty(arrTemp(i, j)) Then
With UF_Treeview.TreeViewAvis
bExists =3D False
For Each elm In .Nodes
If elm =3D arrTemp(i, j) Then
bExists =3D True
End If
Next
If Not bExists Then
If j =3D 1 Then
If arrTemp(i, j) <> "" And arrTemp(i, j) <> " - " T=
hen
Set Node =3D .Nodes.Add(, , arrTemp(i, j), arrT=
emp(i, j))
End If
Else
If arrTemp(i, j) <> "" And arrTemp(i, j) <> " - " T=
hen
Set Node =3D .Nodes.Add(arrTemp(i, j - 1), tvwC=
hild, arrTemp(i, j), arrTemp(i, j))
End If
End If
Node.Expanded =3D True
End If
End With
End If
Next
Next

End Sub
Function CustomTranspose(ByVal buf As Variant) As Variant
'Transpose an order of an array from Parent to Child
Dim arrTemp() As Variant
Dim i As Long, j As Long, K As Long
ReDim arrTemp(LBound(buf) To UBound(buf), LBound(buf, 2) To UBound(buf,=
2))
For i =3D 1 To UBound(buf)
K =3D 0
For j =3D UBound(buf, 2) To 1 Step -1
If Not IsEmpty(buf(i, j)) Then
K =3D K + 1
arrTemp(i, K) =3D buf(i, j)
End If
Next
Next
CustomTranspose =3D arrTemp
End Function

1 réponse

Avatar
MichD
Bonjour,
Si l'exemple de ce fichier peut t'aider :
https://www.cjoint.com/c/IAvmIcWcJ5H
MichD