Charger automatiquement un UserForm à l'ouverture d'un classeur

DiG

XLDnaute Nouveau
Bonjour à tous,

Enoncé du problème :
Un classeur est distribué à différents services (n exemplaires). Ce classeur contient un UserForm pour la saisie d'informations.
Si une modification doit être apportée au UserForm, il faut corriger n fois (chaque classeur manuellement).
Mon idée :
Charger automatiquement le userform stocké au format *.frm *.frx sur une unité du réseau et l'incorporer au classeur avec l'événement WorkBook_Open().

Quelqu'un saurait-il faire cela ? Merci d'avance. Didier
 

Spitnolan08

XLDnaute Barbatruc
Re : Charger automatiquement un UserForm à l'ouverture d'un classeur

Bonjour,

A placer dans le module thisworkbook :
Pour Un UserForm nommé UserForm1 et un chemin d'accès à adapter
Code:
Private Sub Workbook_Open()
Dim NomFichModule As String, NomModule As String, Chemin As String

Chemin = "C:\"
NomModule = "UserForm1.frm"
NomFichModule = Chemin & NomModule
    
With ThisWorkbook
    .VBProject.VBComponents.Import NomFichModule
    .Save
End With
    
End Sub
Cordialement
 
Dernière édition:

DiG

XLDnaute Nouveau
Re : Charger automatiquement un UserForm à l'ouverture d'un classeur

Merci Spitnolan08,
La solution proposée fonctionne parfaitement... Mais...

En fait, il faut bien charger le userform mais il faut décharger sa version précédente avant de le charger sinon erreur. J'ai utilisé :

.VBProject.VBComponents.Remove .Item("NomUserform") et ça fonctionne.

Le problème résiduel est que chargé ainsi, le userform ne s'affiche pas avec : NomUserform.Show

Pour contourner ceci j'ai trouvé la commande : VBA.UserForms.Add("NomUserform").Show

Cette fois l'affichage fonctionne mais c'est la commande
NomUserform.Hide qui provoque une erreur d'execution de type Object manquant.

J'y perd mon VBA! Et suis preneur de tout conseil ! Merci d'avance
 

Spitnolan08

XLDnaute Barbatruc
Re : Charger automatiquement un UserForm à l'ouverture d'un classeur

Re,

J'avoue que je ne comprends pas trop ton problème. Ce code fonctionne pour un UF nommé Test :
Code:
Private Sub Workbook_Open()
Dim NomFichModule As String, NomModule As String, Chemin As String, NomVBC As String

Chemin = "C:\"
NomVBC = "Test"
NomModule = "Test.frm"
NomFichModule = Chemin & NomModule
    
With ThisWorkbook
    .VBProject.VBComponents.Remove .VBProject.VBComponents(NomVBC)
    .VBProject.VBComponents.Import NomFichModule
    .Save
End With

End Sub
Pour ouvrir l'UF
Code:
Sub test2()
Test.Show
End Sub
Pour fermer l'UF
Code:
Sub test3()
Unload Test
End Sub
Nota : pour utiliser Sub Test3 dans cet exemple, il faut que ton UF soit en non modal.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 098
Messages
2 085 265
Membres
102 844
dernier inscrit
atori2