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
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
DAns un formulaire
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
et dans thisWorkbook
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
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...