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

Ajout contrôle tiers sur formulaire par vba

3 réponses
Avatar
sfec
Bonjour,

il me semble avoir lu un jour une méthode pour réimplanter, par vba, un
contrôle supplémentaire tiers sur un formulaire Excel.

Pour résumer mon problème, j'ai une application Excel sur laquelle je
deverse le contenu d'un douchette laser par l'intemédiaire d'un OCX fourni
par le fabricant de la douchette.

Cet OCX ajoute un contrôle à la liste des contrôles supplémentaires d'excel,
et il suffit de l'ajouter sur un formulaire pour pouvoir l'adresser et le
contrôler depuis le code vba de ce dernier.

Le problème est que lorsque je transporte mon application sur une autre
machine, et même si j'ai déjà installé l'OCX avant de lancer l'application,
j'ai un plantage car le contrôle supplémentaire a disparu du formulaire lors
du changement de machine. Et je dois par conséquent le remettre sur le
formulaire manuellement depuis la fenêtre VBA.

Je cherche donc un moyen de forcer cette réimplantation en VBA pour ne pas
avoir à ouvrir la fenêtre VBA et le faire manuellement ...

Merci d'avance pour votre aide.

S.Mariani

3 réponses

Avatar
michdenis
Bonjour SFec,

Voici un exemple comment procéder pour installer un ocx lorsque tu exportes un fichier .zip d'un classeur avec le fichier
ocx.

A ) Dézipper le fichier
B ) Conserver les 2 fichiers dans le même répertoire pour la première ouverture du fichier .xls , afin que la procédure
d'installation de l'Ocx puisse trouver le chemin où le fichier ocx.

C ) À la première ouverture du fichier excel, cette procédure va s'exécuter :

'Copie ceci dans le ThisWorkbook de ton classeur :
'------------------------
Private Sub Workbook_Open()
InstallationFichierOcxOuDLL
End Sub
'------------------------

Dans un module standard, copie ce qui suit :

'Haut d'un module Standard : Déclaration API
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

'-----------------------------
Sub InstallationFichierOcxOuDLL()

Dim FichierSource As String, FichierCible As String
Dim OcxFile As String, Chemin As String

OcxFile = "Msmask32.ocx"
Chemin = CheminSystem & ""

FichierSource = ThisWorkbook.Path & "" & OcxFile
FichierCible = Chemin & OcxFile

'Vérifie la présence de .oxc,dll dans le fichier système
If Dir(FichierCible) = "" Then
'Si pas trouvé,
'Vérifier que ce "ocx" est présent dans le même
'répertoire que ce fichier (ThisWorkbook.path)
'Afin de le copier dans le répertoire système de
'de l'ordinateur de l'usager

If Dir(FichierSource) = "" Then
MsgBox "Le ficher " & OcxFile & " n'est pas dans " & _
"le même répertoire de ce classeur! Vérifier !" & vbCrLf & vbCrLf & _
"Afin d'assurer le bon fonctionnement des processus" & vbvrlf & _
" d'automation de ce fichier, copier le fichier" & vbCrLf & _
" manquant le répertoire suivant : " & Chemin & vbCrLf & vbCrLf & _
"Ce classeur se fermera à la fermeture de cette fenêtre.", _
vbCritical + vbOKOnly, "Info utilisateur"
ThisWorkbook.Close False
End If

'Copie du fichier ocx vers le répertoire système
FileCopy FichierSource, FichierCible

'Initialisation de l'ocx dans la base de registre
Shell Chemin & "regsvr32.exe " & OcxFile & " /s"

'Ajouter la référence au projet
Application.VBE.ActiveVBProject.References.AddFromFile FichierCible

End If

End Sub
'-----------------------------

Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'-----------------------------

Et en dernier lieu, il est même possible de faire disparaître ces procédures du fichier après une installation réussie.
À toi d'y voir !


Salutations!






"sfec" a écrit dans le message de news:
Bonjour,

il me semble avoir lu un jour une méthode pour réimplanter, par vba, un
contrôle supplémentaire tiers sur un formulaire Excel.

Pour résumer mon problème, j'ai une application Excel sur laquelle je
deverse le contenu d'un douchette laser par l'intemédiaire d'un OCX fourni
par le fabricant de la douchette.

Cet OCX ajoute un contrôle à la liste des contrôles supplémentaires d'excel,
et il suffit de l'ajouter sur un formulaire pour pouvoir l'adresser et le
contrôler depuis le code vba de ce dernier.

Le problème est que lorsque je transporte mon application sur une autre
machine, et même si j'ai déjà installé l'OCX avant de lancer l'application,
j'ai un plantage car le contrôle supplémentaire a disparu du formulaire lors
du changement de machine. Et je dois par conséquent le remettre sur le
formulaire manuellement depuis la fenêtre VBA.

Je cherche donc un moyen de forcer cette réimplantation en VBA pour ne pas
avoir à ouvrir la fenêtre VBA et le faire manuellement ...

Merci d'avance pour votre aide.

S.Mariani
Avatar
sfec
Bonsoir,

Merci beaucoup pour ton exemple fort utile, que je garde précieusement.

Toutefois mon problème ne viens pas de là. En effet ayant d'autres fichiers
à installer par ailleurs, j'ai créé un fichier d'installation (auto install)
qui installe et déclare automatique l'OCX en question.

Le problème vient du fait que malgré que l'OCX soit installé et déclaré
avant la première ouverture du classeur Excel, le contrôle piloté par l'OCX
disparait du formulaire sur lequel il se trouve, et il faut le remettre "à
la main" en ouvrant l'éditeur VBA, le formulaire, clic droit sur la fenêtre
de propriétés du formulaire et "Ajouter nouveau contrôle".

Le plus drôle, c'est que le Contrôle et le chemin de l'OCX qui le pilote est
bien présent dans la liste des contrôles disponibles, mais n'est pas coché
!!!

Dans tous les cas merci encore pour ta contribution !

Cordialement,

Serge Mariani.


"michdenis" a écrit dans le message de news:

Bonjour SFec,

Voici un exemple comment procéder pour installer un ocx lorsque tu
exportes un fichier .zip d'un classeur avec le fichier

ocx.

A ) Dézipper le fichier
B ) Conserver les 2 fichiers dans le même répertoire pour la première
ouverture du fichier .xls , afin que la procédure

d'installation de l'Ocx puisse trouver le chemin où le fichier ocx.

C ) À la première ouverture du fichier excel, cette procédure va
s'exécuter :


'Copie ceci dans le ThisWorkbook de ton classeur :
'------------------------
Private Sub Workbook_Open()
InstallationFichierOcxOuDLL
End Sub
'------------------------

Dans un module standard, copie ce qui suit :

'Haut d'un module Standard : Déclaration API
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As
Long


'-----------------------------
Sub InstallationFichierOcxOuDLL()

Dim FichierSource As String, FichierCible As String
Dim OcxFile As String, Chemin As String

OcxFile = "Msmask32.ocx"
Chemin = CheminSystem & ""

FichierSource = ThisWorkbook.Path & "" & OcxFile
FichierCible = Chemin & OcxFile

'Vérifie la présence de .oxc,dll dans le fichier système
If Dir(FichierCible) = "" Then
'Si pas trouvé,
'Vérifier que ce "ocx" est présent dans le même
'répertoire que ce fichier (ThisWorkbook.path)
'Afin de le copier dans le répertoire système de
'de l'ordinateur de l'usager

If Dir(FichierSource) = "" Then
MsgBox "Le ficher " & OcxFile & " n'est pas dans " & _
"le même répertoire de ce classeur! Vérifier !" & vbCrLf &
vbCrLf & _

"Afin d'assurer le bon fonctionnement des processus" & vbvrlf
& _

" d'automation de ce fichier, copier le fichier" & vbCrLf & _
" manquant le répertoire suivant : " & Chemin & vbCrLf &
vbCrLf & _

"Ce classeur se fermera à la fermeture de cette fenêtre.", _
vbCritical + vbOKOnly, "Info utilisateur"
ThisWorkbook.Close False
End If

'Copie du fichier ocx vers le répertoire système
FileCopy FichierSource, FichierCible

'Initialisation de l'ocx dans la base de registre
Shell Chemin & "regsvr32.exe " & OcxFile & " /s"

'Ajouter la référence au projet
Application.VBE.ActiveVBProject.References.AddFromFile FichierCible

End If

End Sub
'-----------------------------

Function CheminSystem()
Dim RetVal As Long
Dim SysDir As String

SysDir = Space$(256)
RetVal = GetSystemDirectory(SysDir, Len(SysDir))

If RetVal <> 0 Then
CheminSystem = Left$(SysDir, RetVal)
End If
End Function
'-----------------------------

Et en dernier lieu, il est même possible de faire disparaître ces
procédures du fichier après une installation réussie.

À toi d'y voir !


Salutations!






"sfec" a écrit dans le message de
news:

Bonjour,

il me semble avoir lu un jour une méthode pour réimplanter, par vba, un
contrôle supplémentaire tiers sur un formulaire Excel.

Pour résumer mon problème, j'ai une application Excel sur laquelle je
deverse le contenu d'un douchette laser par l'intemédiaire d'un OCX fourni
par le fabricant de la douchette.

Cet OCX ajoute un contrôle à la liste des contrôles supplémentaires
d'excel,

et il suffit de l'ajouter sur un formulaire pour pouvoir l'adresser et le
contrôler depuis le code vba de ce dernier.

Le problème est que lorsque je transporte mon application sur une autre
machine, et même si j'ai déjà installé l'OCX avant de lancer
l'application,

j'ai un plantage car le contrôle supplémentaire a disparu du formulaire
lors

du changement de machine. Et je dois par conséquent le remettre sur le
formulaire manuellement depuis la fenêtre VBA.

Je cherche donc un moyen de forcer cette réimplantation en VBA pour ne pas
avoir à ouvrir la fenêtre VBA et le faire manuellement ...

Merci d'avance pour votre aide.

S.Mariani





Avatar
michdenis
Bonjour,

Es-tu certain d'avoir initialer la base de registre des OCX utilisés... le seul fait de les copier dans le répertoire système
de Windows n'est pas suffisant ?

Es-tu certain que les versions des OCX sur la machine où tu ouvres ton fichier est la même que l'OCX utilisé à la création du
fichier ?

Exemple : Le fichier permettant d'utilisé un calendrier dans un formulaire est différent : Version 97 et version 2000.


J'ai fait une petite expérience :( Excel 2003)

J'ai créé un formulaire et j'y ai placé le contrôle "Calendrier" . J'ai enregistré et fermé le fichier. J'ai fait disparaître
le contrôle calendrier de la boîte à outils pour formulaire, et décocher la référence appropriée. Et lorsque j'ai rouvert mon
fichier à nouveau, le calendrier était toujours présent et fonctionnel bien que le contrôle était absent de la boîte à outils
pour formulaire... la référence au fichier calendrier était à nouveau cocher !

Je n'arrive pas à reproduire ce qui t'arrive ! Et c'est pour le moins étrange !


Salutations!