OVH Cloud OVH Cloud

Pointer vers un fichier OCX

14 réponses
Avatar
Michel HOLDERITH
Bonjour tout le monde,

Voila j'utilise dans un Userform un calendrier pointant vers un fichier OCX.
Lorsque j'ai voulu utiliser ce meme fichier sur un autre ordinateur, bien
sur ce fichier OCX n'etait pas present ce qui fait que j'ai copier ce
fichier dans un repertoire de mon choix.

Ma question et peut-on faire pointer le Userform et/ou le calendrier vers ce
fichier OCX, sans avoir besoin d'aller dans les references de VBA pour
l'activer ?

Pour info ce fichier se trouve sur disquette et/ou CD graver pour la
distribution. C'est pourquoi j'ai creer un repertoire "setup" ou mon fichier
OCX est copie.

Merci d'avance pour vos reponses,
@+
Michel.

4 réponses

1 2
Avatar
Michel Pierron
Re Michel;
Est-ce que le fichier OCX doit etre dans un repertoire particulier ou pas ?
Non; lors de l'enregistrement avec regsvr32.exe, le chemin est mémorisé;
mais le plus simple est quand même de placer le fichier .ocx dans le
répertoire WindowsSystem ou WindowsSystem32 selon la version de Windows.
Sinon, essaie:
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-datepicker
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:uu7Oc$J%
Je vais voir ca.... t'as toutes les versions de windows et d'excel
!!!!!!!!!!!!

Est-ce que le fichier OCX doit etre dans un repertoire particulier ou pas
?

Ce qui m'arrangerais et de creer un repertoire sous
C:babaessai.xls et
C:setupcalend.ocx

le but pour moi et de pouvoir faire une reference automatique de mon
fichier

excel(VBA) vers ce repertoire et fichier OCX automatiquement (ce qui ne
marche pas apparement (j'ai teste), ou la derniere solution de creer lors
de

l'appel du userform "Calendar" le calendrier, mais la encore lors de
l'initialisation, je n'ai pas vu de chemin direct....
Sauf que lors d'essai j'ai renommer mon fichier OCX, le calendrier ne
marchait pas.... ce qui veut dire qui le trouve bien dans mon
repertoire...

strange.

J'en ai vraiment marre de ce calendrier de m............ le temps que j'ai
perdu pour ca....

Il n'y aurait pas un autre moyen a ta connaissance pour utiliser un
userform

calendrier qui pourrait etre commun a tous les excel et/ou windows sans
etre

oblige d'utiliser un fichier tel que le OCX ?
Merci encore de ta patience et de ton soutien.
@+
Michel.


"Michel Pierron" wrote in message
news:e9f0uEJ%
Bonjour Michel;
Je viens de tester sous XP + xl2002, ça marche nickel !
Il faut bien sur que le fichier .oc existe sur la machine et qu'il soit
coorectement enregistré.
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:e$cSd2H%
Salut,
effectivement j'avais oublie : Private WithEvents Calendar1 As
Calendar



Maintenant ca marche, sauf..... sauf..... l'essentiel, car :
Sous (windows 98 & windows millenium) avec Excel 2000 tout marche bien
Sous (windows2000) avec Excel 2002 tout marche bien
Sous XP et excel 2002 ca ne marche pas.... :o(
Une raison particuliere ? sachant que je n'ai pas d'XP et que
l'utilisateur

final sera lui sur XP.......
@+
Merci encore pour ton aide,
Michel.

"Michel Pierron" wrote in message
news:
Bonjour Michel;

Vérifie que tu as bien indiqué en tête de ton module UserForm:
Private WithEvents Calendar1 As Calendar


' Ensuite, pour initialiser le calendrier, fais au plus simple comme
ceci:


Private Sub UserForm_Initialize()
On Error GoTo 1
Set Calendar1 = Me.Controls.Add("MSCAL.Calendar", "Calendar1", True)
With Calendar1
.Left = 6: .Top = 6
.Width = 222: .Height = 144
End With
Exit Sub
1: MsgBox "Error: " & Err.Number & vbLf & Err.Description, 48: End
End Sub


' Ajoute la procédure évènementielle:
Private Sub Calendar1_Click()
Label1 = Calendar1.Value
End Sub

Et ça devrait rouler.
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message
de




news:
Salut,

Merci pour ta reponse, ca marche tip-top.....
Par contre une autre question.... comment faire pour recuperer la
valeur



de
Ctl ?

Apres click boutton OK cela devrait pouvoir me mettre la valeur du
calendrier dans un label.... mais Ctl reste desesperement
vide.....






J'ai vu que Me.control.item(3) : _value0/06/04

Comment recuperer cette valeur, ou un autre moyen ?

Merci d'avance,
@+
Michel.


"Michel Pierron" wrote in message
news:
Bonjour Michel;
Ajuste tes paramètres Ctl.Width = 222 et Ctl.Height = 144

Private WithEvents Calendar1 As Calendar

Private Sub UserForm_Initialize()
On Error GoTo 1
Dim Ctl As Control
Set Ctl = Me.Controls.Add("MSCAL.Calendar", "Calendar1", True)
Ctl.Left = 6: Ctl.Top = 6
Ctl.Width = 222: Ctl.Height = 144
Set Calendar1 = Ctl
Exit Sub
1: MsgBox "Error: " & Err.Number & vbLf & Err.Description, 48:
End






End Sub

Private Sub Calendar1_Click()
With Calendar1
ActiveCell = DateSerial(.Year, .Month, .Day)
End With
End Sub

MP

"Michel HOLDERITH" <#nospam# a écrit dans le
message






de
news:
Bonjour,
J'ai essaye mais ca ne marche pas.....
n'yaurait-il pas une autre solution ?
Merci,
@+
Michel.

"Clément Marcotte" wrote in
message





news:
Bonjour,

Chez Frédéric, parmi d'autres:






http://frederic.sigonneau.free.fr/code/VBE/AjouterSupprimerReference.txt






"Michel HOLDERITH" <#nospam# a écrit dans le
message






de
news:
Bonjour tout le monde,

Voila j'utilise dans un Userform un calendrier pointant
vers









un
fichier OCX.
Lorsque j'ai voulu utiliser ce meme fichier sur un autre
ordinateur,





bien
sur ce fichier OCX n'etait pas present ce qui fait que
j'ai









copier
ce
fichier dans un repertoire de mon choix.

Ma question et peut-on faire pointer le Userform et/ou le
calendrier





vers ce
fichier OCX, sans avoir besoin d'aller dans les references
de








VBA
pour
l'activer ?

Pour info ce fichier se trouve sur disquette et/ou CD
graver









pour
la
distribution. C'est pourquoi j'ai creer un repertoire
"setup"








ou
mon
fichier
OCX est copie.

Merci d'avance pour vos reponses,
@+
Michel.
































Avatar
Michel Pierron
Re Michel;
Histoire d'enfoncer le clou, une autre façon de faire qui marche avec toutes
les versions de Windows sans avoir besoin du fichier mscal.ocx:
Sur un UserForm, place un textbox et un commandbutton.
Dans le module UserForm:
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias _
"CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String _
, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long _
, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long _
, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long _
, lpParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As
Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, lParam As Any) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long _
, ByVal hWndNewParent As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long

Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Private dtHwnd As Long

Private Sub CommandButton1_Click()
Dim CurSysTime As SYSTEMTIME
SendMessage dtHwnd, &H1001, 0&, CurSysTime
With CurSysTime
TextBox1 = Format(DateSerial(.wYear, .wMonth, .wDay), "Short Date")
ActiveCell = CDate(TextBox1)
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
DestroyWindow dtHwnd
End Sub

Private Sub UserForm_Initialize()
Dim meHwnd As Long, h&
h = GetSystemMetrics(51)
meHwnd = FindWindow(vbNullString, Me.Caption)
dtHwnd = CreateWindowEx(0, "SysMonthCal32", vbNullString, _
&H50000000, 4, -h, 200, 200, meHwnd, 0&, 0&, ByVal 0&)
SetParent dtHwnd, meHwnd
Me.Width = (Me.Width - Me.InsideWidth) + 208 * 3 / 4
TextBox1.Top = (200 - h) * 3 / 4: TextBox1.ZOrder 0
TextBox1.Height = 18
TextBox1.Left = 6
TextBox1.Width = 90
CommandButton1.Top = TextBox1.Top
CommandButton1.Left = TextBox1.Left + TextBox1.Width + 6
CommandButton1.Height = 18
CommandButton1.Width = 48
CommandButton1.Caption = "OK"
CommandButton1.ZOrder 0
Me.Height = TextBox1.Top + TextBox1.Height _
+ GetSystemMetrics(4) + 6
Me.Width = CommandButton1.Left + 6 _
+ CommandButton1.Width _
+ GetSystemMetrics(7) * 3 / 2

MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:uu7Oc$J%
Je vais voir ca.... t'as toutes les versions de windows et d'excel
!!!!!!!!!!!!

Est-ce que le fichier OCX doit etre dans un repertoire particulier ou pas
?

Ce qui m'arrangerais et de creer un repertoire sous
C:babaessai.xls et
C:setupcalend.ocx

le but pour moi et de pouvoir faire une reference automatique de mon
fichier

excel(VBA) vers ce repertoire et fichier OCX automatiquement (ce qui ne
marche pas apparement (j'ai teste), ou la derniere solution de creer lors
de

l'appel du userform "Calendar" le calendrier, mais la encore lors de
l'initialisation, je n'ai pas vu de chemin direct....
Sauf que lors d'essai j'ai renommer mon fichier OCX, le calendrier ne
marchait pas.... ce qui veut dire qui le trouve bien dans mon
repertoire...

strange.

J'en ai vraiment marre de ce calendrier de m............ le temps que j'ai
perdu pour ca....

Il n'y aurait pas un autre moyen a ta connaissance pour utiliser un
userform

calendrier qui pourrait etre commun a tous les excel et/ou windows sans
etre

oblige d'utiliser un fichier tel que le OCX ?
Merci encore de ta patience et de ton soutien.
@+
Michel.


Avatar
Michel HOLDERITH
Salut,
C'est sympa, mais bof.... ce n'est pas un calendrier tres pratique......
Merci quand meme.
@+
Michel.

"Michel Pierron" wrote in message
news:eD009fM%
Re Michel;
Histoire d'enfoncer le clou, une autre façon de faire qui marche avec
toutes

les versions de Windows sans avoir besoin du fichier mscal.ocx:
Sur un UserForm, place un textbox et un commandbutton.
Dans le module UserForm:
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias _
"CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String _
, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long _
, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long _
, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long _
, lpParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long)
As

Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, lParam As Any) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long _
, ByVal hWndNewParent As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long

Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Private dtHwnd As Long

Private Sub CommandButton1_Click()
Dim CurSysTime As SYSTEMTIME
SendMessage dtHwnd, &H1001, 0&, CurSysTime
With CurSysTime
TextBox1 = Format(DateSerial(.wYear, .wMonth, .wDay), "Short Date")
ActiveCell = CDate(TextBox1)
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
DestroyWindow dtHwnd
End Sub

Private Sub UserForm_Initialize()
Dim meHwnd As Long, h&
h = GetSystemMetrics(51)
meHwnd = FindWindow(vbNullString, Me.Caption)
dtHwnd = CreateWindowEx(0, "SysMonthCal32", vbNullString, _
&H50000000, 4, -h, 200, 200, meHwnd, 0&, 0&, ByVal 0&)
SetParent dtHwnd, meHwnd
Me.Width = (Me.Width - Me.InsideWidth) + 208 * 3 / 4
TextBox1.Top = (200 - h) * 3 / 4: TextBox1.ZOrder 0
TextBox1.Height = 18
TextBox1.Left = 6
TextBox1.Width = 90
CommandButton1.Top = TextBox1.Top
CommandButton1.Left = TextBox1.Left + TextBox1.Width + 6
CommandButton1.Height = 18
CommandButton1.Width = 48
CommandButton1.Caption = "OK"
CommandButton1.ZOrder 0
Me.Height = TextBox1.Top + TextBox1.Height _
+ GetSystemMetrics(4) + 6
Me.Width = CommandButton1.Left + 6 _
+ CommandButton1.Width _
+ GetSystemMetrics(7) * 3 / 2

MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:uu7Oc$J%
Je vais voir ca.... t'as toutes les versions de windows et d'excel
!!!!!!!!!!!!

Est-ce que le fichier OCX doit etre dans un repertoire particulier ou
pas


?
Ce qui m'arrangerais et de creer un repertoire sous
C:babaessai.xls et
C:setupcalend.ocx

le but pour moi et de pouvoir faire une reference automatique de mon
fichier

excel(VBA) vers ce repertoire et fichier OCX automatiquement (ce qui ne
marche pas apparement (j'ai teste), ou la derniere solution de creer
lors


de
l'appel du userform "Calendar" le calendrier, mais la encore lors de
l'initialisation, je n'ai pas vu de chemin direct....
Sauf que lors d'essai j'ai renommer mon fichier OCX, le calendrier ne
marchait pas.... ce qui veut dire qui le trouve bien dans mon
repertoire...

strange.

J'en ai vraiment marre de ce calendrier de m............ le temps que
j'ai


perdu pour ca....

Il n'y aurait pas un autre moyen a ta connaissance pour utiliser un
userform

calendrier qui pourrait etre commun a tous les excel et/ou windows sans
etre

oblige d'utiliser un fichier tel que le OCX ?
Merci encore de ta patience et de ton soutien.
@+
Michel.





Avatar
Michel HOLDERITH
Salut,
tip-top cool...
j'ai fait un fichier .BAT
avec : regsvr32 c:essaimscal.ocx
et tout marche pour les versions :
- Windows98 & windows millenium avec excel 2000
- Windows XP avec excel 2002

Par contre cela ne marche pas avec Windows 2000 avec excel 2002.....
peut etre que le fichier regsvr32 n'est pas la bonne version.
J'ai copier celui-ci de windows98.... c'est a voir, mais pour l'instant
c'est top.
La premiere fois que tu veux utiliser le fichier .XLS, tu lance mon fichier
.BAT puis apres tu peux utiliser le fichier . XLS rebooter le pc et
re-utiliser le fichier .XLS sans avoir besoin de re-lancer le fichier .BAT.
Merci beaucoup pour le tuyau.
@+
Michel.


"Michel Pierron" wrote in message
news:uzIyvvL%
Re Michel;
Est-ce que le fichier OCX doit etre dans un repertoire particulier ou pas
?

Non; lors de l'enregistrement avec regsvr32.exe, le chemin est mémorisé;
mais le plus simple est quand même de placer le fichier .ocx dans le
répertoire WindowsSystem ou WindowsSystem32 selon la version de Windows.
Sinon, essaie:
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-datepicker
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:uu7Oc$J%
Je vais voir ca.... t'as toutes les versions de windows et d'excel
!!!!!!!!!!!!

Est-ce que le fichier OCX doit etre dans un repertoire particulier ou
pas


?
Ce qui m'arrangerais et de creer un repertoire sous
C:babaessai.xls et
C:setupcalend.ocx

le but pour moi et de pouvoir faire une reference automatique de mon
fichier

excel(VBA) vers ce repertoire et fichier OCX automatiquement (ce qui ne
marche pas apparement (j'ai teste), ou la derniere solution de creer
lors


de
l'appel du userform "Calendar" le calendrier, mais la encore lors de
l'initialisation, je n'ai pas vu de chemin direct....
Sauf que lors d'essai j'ai renommer mon fichier OCX, le calendrier ne
marchait pas.... ce qui veut dire qui le trouve bien dans mon
repertoire...

strange.

J'en ai vraiment marre de ce calendrier de m............ le temps que
j'ai


perdu pour ca....

Il n'y aurait pas un autre moyen a ta connaissance pour utiliser un
userform

calendrier qui pourrait etre commun a tous les excel et/ou windows sans
etre

oblige d'utiliser un fichier tel que le OCX ?
Merci encore de ta patience et de ton soutien.
@+
Michel.


"Michel Pierron" wrote in message
news:e9f0uEJ%
Bonjour Michel;
Je viens de tester sous XP + xl2002, ça marche nickel !
Il faut bien sur que le fichier .oc existe sur la machine et qu'il
soit



coorectement enregistré.
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message de
news:e$cSd2H%
Salut,
effectivement j'avais oublie : Private WithEvents Calendar1 As
Calendar



Maintenant ca marche, sauf..... sauf..... l'essentiel, car :
Sous (windows 98 & windows millenium) avec Excel 2000 tout marche
bien




Sous (windows2000) avec Excel 2002 tout marche bien
Sous XP et excel 2002 ca ne marche pas.... :o(
Une raison particuliere ? sachant que je n'ai pas d'XP et que
l'utilisateur

final sera lui sur XP.......
@+
Merci encore pour ton aide,
Michel.

"Michel Pierron" wrote in message
news:
Bonjour Michel;

Vérifie que tu as bien indiqué en tête de ton module UserForm:
Private WithEvents Calendar1 As Calendar


' Ensuite, pour initialiser le calendrier, fais au plus simple
comme





ceci:
Private Sub UserForm_Initialize()
On Error GoTo 1
Set Calendar1 = Me.Controls.Add("MSCAL.Calendar", "Calendar1",
True)





With Calendar1
.Left = 6: .Top = 6
.Width = 222: .Height = 144
End With
Exit Sub
1: MsgBox "Error: " & Err.Number & vbLf & Err.Description, 48: End
End Sub


' Ajoute la procédure évènementielle:
Private Sub Calendar1_Click()
Label1 = Calendar1.Value
End Sub

Et ça devrait rouler.
MP

"Michel HOLDERITH" <#nospam# a écrit dans le message
de




news:
Salut,

Merci pour ta reponse, ca marche tip-top.....
Par contre une autre question.... comment faire pour recuperer
la






valeur
de
Ctl ?

Apres click boutton OK cela devrait pouvoir me mettre la valeur
du






calendrier dans un label.... mais Ctl reste desesperement
vide.....






J'ai vu que Me.control.item(3) : _value0/06/04

Comment recuperer cette valeur, ou un autre moyen ?

Merci d'avance,
@+
Michel.


"Michel Pierron" wrote in message
news:
Bonjour Michel;
Ajuste tes paramètres Ctl.Width = 222 et Ctl.Height = 144

Private WithEvents Calendar1 As Calendar

Private Sub UserForm_Initialize()
On Error GoTo 1
Dim Ctl As Control
Set Ctl = Me.Controls.Add("MSCAL.Calendar", "Calendar1", True)
Ctl.Left = 6: Ctl.Top = 6
Ctl.Width = 222: Ctl.Height = 144
Set Calendar1 = Ctl
Exit Sub
1: MsgBox "Error: " & Err.Number & vbLf & Err.Description, 48:
End






End Sub

Private Sub Calendar1_Click()
With Calendar1
ActiveCell = DateSerial(.Year, .Month, .Day)
End With
End Sub

MP

"Michel HOLDERITH" <#nospam# a écrit dans le
message






de
news:
Bonjour,
J'ai essaye mais ca ne marche pas.....
n'yaurait-il pas une autre solution ?
Merci,
@+
Michel.

"Clément Marcotte" wrote in
message





news:
Bonjour,

Chez Frédéric, parmi d'autres:










http://frederic.sigonneau.free.fr/code/VBE/AjouterSupprimerReference.txt






"Michel HOLDERITH" <#nospam# a écrit dans le
message






de
news:
Bonjour tout le monde,

Voila j'utilise dans un Userform un calendrier pointant
vers









un
fichier OCX.
Lorsque j'ai voulu utiliser ce meme fichier sur un autre
ordinateur,





bien
sur ce fichier OCX n'etait pas present ce qui fait que
j'ai









copier
ce
fichier dans un repertoire de mon choix.

Ma question et peut-on faire pointer le Userform et/ou
le










calendrier
vers ce
fichier OCX, sans avoir besoin d'aller dans les
references










de
VBA
pour
l'activer ?

Pour info ce fichier se trouve sur disquette et/ou CD
graver









pour
la
distribution. C'est pourquoi j'ai creer un repertoire
"setup"








ou
mon
fichier
OCX est copie.

Merci d'avance pour vos reponses,
@+
Michel.



































1 2