Bonjour,
J'ai été confronté à un problème de version d'un composant Treeview générant sur certains postes un message :
"impossible de charger le objet car il n'est pas disponible sur cette machine".
j'ai donc décidé de créer le composant lors de l’exécution (at runtime).
Dans un module de classe nommé Treeview_Events
DAns un formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private WithEvents lv_event As MSComctlLib.TreeView Friend Sub Watch_Control(ob As MSComctlLib.TreeView) Set lv_event = ob End Sub Private Sub lv_event_Click() MsgBox "oops" End Sub
et dans thisWorkbook
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 Dim stuff As TreeView_Events Private Sub UserForm_Initialize() On Error Resume Next If Not Me.Controls("MonArbre").Visible = True Then If Err Then Set MonArbre = Me.Controls.Add("MSComctlLib.TreeCtrl", "MonArbre", True) Set stuff = New TreeView_Events stuff.Watch_Control Me.Controls("MonArbre") ' mise à jour des propriétés With MonArbre .Height = 198 .HideSelection = Vrai .Indentation = 28.35 .LabelEdit = 1 .LineStyle = 0 .MousePointer = 0 '.MouseIcon = 0 .PathSeparator = "\" .Sorted = Faux .Style = 7 .OLEDragMode = 0 .OLEDropMode = 0 .Appearance = 0 .BorderStyle = 1 .Enabled = True .Font = "Tahoma" '.Hwnd = 3802454 .CheckBoxes = False .FullRowSelect = True .HotTracking = True .Scroll = True .SingleSel = True '.ControlTipText= .Height = 198 .HelpContextID = 0 '.InSelection = False .Left = 12 .TabIndex = 0 .TabStop = True .Tag = "" .Top = 42 .Visible = True .Width = 468 End With On Error GoTo 0 End If End If 'alimentation du treeview Dim feuille As Worksheet Set CeFichier = ThisWorkbook MonArbre.Nodes.Add(, , "NoeudInit", "Fenêtres").Expanded = True ' Racine arbre O = 0 '-- FICHIERS For w = 1 To Application.Windows.Count Fenetre = Application.Windows.Item(w).Caption If CeFichier.Name = Fenetre Then GoTo W_suivant If Windows(Fenetre).Visible = True Then MonArbre.Nodes.Add("NoeudInit", tvwChild, "NoeudDep" & w, Fenetre).Expanded = False '--- Onglets For f = 1 To Workbooks(Fenetre).Sheets.Count O = O + 1 Set feuille = Workbooks(Fenetre).Sheets(f) If feuille.Visible = True Then MonArbre.Nodes.Add("NoeudDep" & w, tvwChild, "NoeudMat" & O, feuille.Name).Expanded = True End If Next f End If W_suivant: Next w End Sub
Ce code fonctionne très bien mais je voudrais m'affranchir de la dernière partie, c'est à dire l'ajout de la référence avec un createobject par exemple, mais je sèche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.VBE.ActiveVBProject.References.Remove ThisWorkbook.VBProject.References.Item("MSComctlLib") End Sub Private Sub Workbook_Open() 'Stop On Error Resume Next t = Application.VBE.ActiveVBProject.References.AddFromFile("C:\WINDOWS\system32\MSCOMCTL.OCX") End Sub
Partager