Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié que
ce fichier était déjà présent dans l'un ou l'autre des répertoi res
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls 6.0 (SP6 )
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci F2).
Dans la liste déroulante "Toutes les bibliothèques" se retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une "appellati on
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de Wind ows.
En conséquence, le chargement de cette dernière n'est pas assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette méth ode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les diff érentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les bibliothèque s
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques désir ées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor: =0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un contrôle supplémen taire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le co de
s'exécutera normalement sur une nouvelle machine. Cependant, la procé dure
ne permet pas d'ajouter le contrôle "Calendar", l'icône, dans la bo îte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié que
ce fichier était déjà présent dans l'un ou l'autre des répertoi res
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls 6.0 (SP6 )
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci F2).
Dans la liste déroulante "Toutes les bibliothèques" se retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une "appellati on
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de Wind ows.
En conséquence, le chargement de cette dernière n'est pas assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette méth ode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les diff érentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les bibliothèque s
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques désir ées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor: =0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un contrôle supplémen taire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le co de
s'exécutera normalement sur une nouvelle machine. Cependant, la procé dure
ne permet pas d'ajouter le contrôle "Calendar", l'icône, dans la bo îte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié que
ce fichier était déjà présent dans l'un ou l'autre des répertoi res
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls 6.0 (SP6 )
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci F2).
Dans la liste déroulante "Toutes les bibliothèques" se retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une "appellati on
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de Wind ows.
En conséquence, le chargement de cette dernière n'est pas assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette méth ode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les diff érentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les bibliothèque s
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques désir ées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor: =0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un contrôle supplémen taire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le co de
s'exécutera normalement sur une nouvelle machine. Cependant, la procé dure
ne permet pas d'ajouter le contrôle "Calendar", l'icône, dans la bo îte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès
l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce
contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié
que
ce fichier était déjà présent dans l'un ou l'autre
des répertoires
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls
6.0 (SP6)
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci
F2).
Dans la liste déroulante "Toutes les bibliothèques" se
retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une
"appellation
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de
Windows.
En conséquence, le chargement de cette dernière n'est pas
assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette
méthode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les
différentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les
bibliothèques
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques
désirées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor:=0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un
contrôle supplémentaire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le
code
s'exécutera normalement sur une nouvelle machine. Cependant, la
procédure
ne permet pas d'ajouter le contrôle "Calendar", l'icône,
dans la boîte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès
l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce
contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié
que
ce fichier était déjà présent dans l'un ou l'autre
des répertoires
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls
6.0 (SP6)
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci
F2).
Dans la liste déroulante "Toutes les bibliothèques" se
retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une
"appellation
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de
Windows.
En conséquence, le chargement de cette dernière n'est pas
assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette
méthode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les
différentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les
bibliothèques
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques
désirées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor:=0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un
contrôle supplémentaire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le
code
s'exécutera normalement sur une nouvelle machine. Cependant, la
procédure
ne permet pas d'ajouter le contrôle "Calendar", l'icône,
dans la boîte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour,
A ) Pour cette ligne de code :
Set Obj = UserF1.Controls("TreeView1")
Cela ne cause aucun problème si le contrôle "TreeView1"
est présent dans le formulaire. Ajoute une ligne de code
précédent cette dernière : On Error Resume Next
B ) La meilleure façon de charger une bibliothèque
Je te donne un exemple comment arriver à charger
une référence à une bibliothèque dès
l'ouverture du
fichier.
En jumelant l'événement du Workbook_Open du Thisworkbook
et la méthode "AddFromGuid", il est possible de charger ladite
bibliothèque. Le code devrait s'exécuter normalement sans
aucun problème à moins que le fichier .OCX responsable de
cette bibliothèque soit absente sur un ordinateur particulier.
Pour la bibliothèque dont il est question, son nom est :
Nom de la bibliothèque : MSComctlLib
Location de la .OCX : C:WindowsSysWOW64MSCOMCTL.OCX
OU C:WindowsSystem32MSCOMCTL.OCX
selon que le Windows est 64 ou 32 bits.
Si le fichier MSCOMCTL.OCX est introuvable sur Excel 2010, il
faut d'abord l'ajouter, renseigner la base de registre et seulement
ensuite tu pourras exécuter les codes reliés à ce
contrôle.
Comme tu utilises ledit classeur avec Excel 2010, as-tu vérifié
que
ce fichier était déjà présent dans l'un ou l'autre
des répertoires
mentionnés.
Appellation descriptive de la bibliothèque dans la
fenêtre des références : Microsoft Windows Common Controls
6.0 (SP6)
La meilleure façon de charger une bibliothèque est d'utiliser le
Guid (Globally Unique Identifier) de la référence.
Pour connaître le nom d'une bibliothèque, on doit ouvrir dans la
fenêtre de l'éditeur de code, l'explorateur d'objets (raccourci
F2).
Dans la liste déroulante "Toutes les bibliothèques" se
retrouve le
nom des bibliothèques chargées pour un projet.
Lorsque l'on ajoute une bibliothèque en utilisant la barre des menus /
outils / références / on retrouve dans cette fenêtre une
"appellation
descriptive" de la bibliothèque. Il ne faut pas confondre entre le
nom de la bibliothèque et l'appellation descriptive.
Le Guid d'une bibliothèque est inscrit dans la base de registre de
Windows.
En conséquence, le chargement de cette dernière n'est pas
assujetti à la
location du fichier source dans l'arborescence de l'explorateur Windows.
Il peut arriver dans quelques cas que Microsoft modifie le nom de la
bibliothèque
pour des raisons qu'il lui appartienne. Pour être sûr de cette
méthode, il
faut
vérifier que ladite bibliothèque (son nom) est identique sur les
différentes
versions d'Excel.
Voici une procédure pour trouver le "Guid" de toutes les
bibliothèques
chargées
dans un projet. Et oui, pour avoir cette information, il faut d'abord
l'avoir chargé !
'------------------------------------------
Sub Lister_LesGuids_Références()
Dim X As Integer, Sh As Worksheet
Dim NbRef As Integer, A As Integer
Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
On Error Resume Next
With Sh
.Name = "GUIDS"
.Cells(1, 1) = "Nom de la bibliothèque"
'Son appellation dans la fenêtre Reférences
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Guid"
.Cells(1, 4) = "Major"
.Cells(1, 5) = "Minor"
.Cells(1, 6) = "Chemin complet"
With .Range("A1:F1")
.Font.Bold = True
.Font.Size = 12
End With
With Sh.Parent.VBProject.References
NbRef = .Count
X = 2
For A = 1 To NbRef
Sh.Cells(X, 1) = .Item(A).Name
Sh.Cells(X, 2) = .Item(A).Description
Sh.Cells(X, 3) = .Item(A).GUID
Sh.Cells(X, 4) = .Item(A).Major
Sh.Cells(X, 5) = .Item(A).Minor
Sh.Cells(X, 6) = .Item(A).fullpath
X = X + 1
Next
End With
.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
End Sub
'------------------------------------------
À partir de l'information, on peut charger les bibliothèques
désirées
de cette manière :
Dans le ThisWorkbook, tu crées ce type de procédure :
Exemple : Pour charger la bibliothèque :
Library MSForms -> Nom de la bibliothèque (formulaire)
C:Windowssystem32FM20.DLL -> Chemin et fichier source
Microsoft Forms 2.0 Object Library -> Appellation descriptive.
Exemple pour charger la référence du formulaire.
'----------------------------------------------
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
.VBProject.References.AddFromGuid _
GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", major:=2, minor:=0
End With
End Sub
'----------------------------------------------
Une information additionnelle, si tu utilises cette façon de faire pour
charger la référence émanant de l'ajout d'un
contrôle supplémentaire
(Exemple : Calendar) à la boîte d'outils formulaire (userform), le
code
s'exécutera normalement sur une nouvelle machine. Cependant, la
procédure
ne permet pas d'ajouter le contrôle "Calendar", l'icône,
dans la boîte à
outils
du formulaire. D'ailleurs, je ne connais pas de code VBA capable de
faire ce travail.
MichD
---------------------------------------------------------------
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================
Bonjour au forum
Depuis plusieurs semaines je cherche une solution mais ne vain.
Cadre de santé en milieu hospitalier je développe pour mon
unité de soins et celles de mes collègues une application de
gestion documentaire sous excel vba.(fiches techniques des appareils
médicaux, protocoles de soins, roulement des soignants, textes de lois,
etc. Cette base sera consultée par tous les agents d es unités,
techniciens , infirmières, aides soignantes, médecins, cadre de
santé, etc
Pour cela j’ai crée un userform nommé « UserF1
» contenant des contrôles dont 2 treeviews, 2 listviews et 2
imageslists.
Quand j’ouvre le classeur excel :
-soit les controls du MSComctlLib ont tous disparus,
-soit le MSCOMCTL.OCX.n’apparaît pas dans la liste des
références
et cela quelque soit le pack office du pc utilisé.(xp,2002,2002,2010).
Tous les pc sont en réseau.
J’ai tenté un tas de solutions par macros dont :
-Suppression des références manquantes
-Réinstallations de ces références
-Chargement des références dans un dossier perso dans lequel
j’ais copié les *.dll,*.ocx, etc.
Rien n’a fonctionné de façon durable.
J’ai donc choisi de créer par macros :
- les contrôles treeview, listeviews et imagelists à
l’ouverture du classer
- avec activation des lignes de codes faisant références à
ces contrôles.
-à la fermeture du classeur par macro je transforme les lignes de codes
faisant références à ces contrôles en commentaires
- et décoche la référence Microsoft windows controls
6.0(sp6), MSCOMCTL.OCX.
Ca marche très bien comme ca. Mais…..
Dans la procédure qui crée les controls MSCOMCTL j’ai mis
deux lignes qui testent si ces contrôles existent déjà et
s’ils existent de ne pas les récréer.
Et bien la rien ne marche.
Dans le code que je vous transmets les lignes de codes que j’ai
transformés en commentaires sont celles qui me posent problème.
Auriez une solution qui me permettrait de retrouver le sommeil.
J’ai créé 6 procédures pour les 6 contrôles
dont voici le code des 2 premières.
Par avance merci à tous pour votre aide
=============================
Dim i As Integer
Dim usf As Object
Dim ObjetsTreeListImage As Object
Dim Obj As Object
=================================
Sub CreerTreeView1()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 2
.Name = "TreeView1"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
ReactiveLigne
End Sub
Sub CreerTreeView2()
Set usf = ThisWorkbook.VBProject.VBComponents("UserF1")
'Set Obj = UserF1.Controls("TreeView2") 'ligne
fautive
'If Obj.Name <> "" Then Exit Sub 'ligne
fautive
Set ObjetsTreeListImage =
usf.Designer.Controls.Add("MSComctlLib.TreeCtrl.2")
With ObjetsTreeListImage
.Height = 290
.Left = 472
.Name = "TreeView2"
.TabStop = True
.Top = 35
.Visible = True
.Width = 276
End With
End Sub
==================================================