Suppression d'un UserForm par macro pour MAJ

Ternoise

XLDnaute Occasionnel
Bonsoir le Forum

Juste pour la forme !

Est'il possible de supprimer un UserForm et d'en remettre un autre à la place ? en macro !

Je pensais à ça afin de mettre à jour cet UserForm dans un projet

C'est à dire, j'ouvre mon "vrai" projet.
Je lance une procédure qui supprime UsfTOTO et je récupère le nouveau UsfTOTO d'un répertoire précis.

Merci

David
 

Roland_M

XLDnaute Barbatruc
Re : Suppression d'un UserForm par macro pour MAJ

Bonsoir,

voir ce code qui n'est pas de moi mais je ne souviens plus !?
cette macro crée l'userf et le supprime ! voir code pour suppression à la fin !

Code:
'créer un userform et controls par code
'cocher ref: Microsoft forms 2.0 Object Library
Sub UserForm_CreatForms()
Dim UF As Object
Dim L As MSForms.Label
Dim CB As MSForms.CommandButton
Dim A$
Dim I&
On Error GoTo Fin
'---- Crée dynamiquement un UserForm ----
Set UF = ThisWorkbook.VBProject.VBComponents.Add(3)
With UF
 .Properties("Caption") = "UserForm à la volée"
 .Properties("Height") = 240
 .Properties("Width") = 320
End With
'---- Crée le bouton de fermeture ----
Set CB = UF.Designer.Controls.Add("forms.CommandButton.1")
With CB
 .Caption = "Fermer"
 .Left = 200
 .Top = 180
End With
'---- Crée le label ----
Set L = UF.Designer.Controls.Add("forms.Label.1")
With L
.Caption = "mon texte"
.TextAlign = fmTextAlignCenter
.Left = 20
.Top = 20
.BackColor = vbRed
.BorderStyle = fmBorderStyleSingle
End With
'°°° Ajout du code évènementiel °°°
A$ = "Sub CommandButton1_Click()" & vbCrLf & "Unload Me" & vbCrLf & "End Sub"
With UF.CodeModule: I& = .CountOfLines: .InsertLines I& + 1, A$: End With
'-----------
A$ = "Sub Label1_Click()" & _
vbCrLf & "MsgBox " & """Vous avez cliqué sur mon texte""" & vbCrLf & "End Sub"
With UF.CodeModule: I& = .CountOfLines: .InsertLines I& + 1, A$: End With
'---- Affiche le UserForm ----
VBA.UserForms.Add(UF.Name).Show
'---- Détruit le UserForm ----
ThisWorkbook.VBProject.VBComponents.Remove UF ' <<<<<<<<<<< supprime l'userf
Fin:
End Sub
 

Ternoise

XLDnaute Occasionnel
Re : Suppression d'un UserForm par macro pour MAJ

Bonjour et merci Roland_M

Ce n'est pas une création dynamique d'un UserForm que je cherche puisque mon USF (avec toute les procédures dedans existe déjà.

Toutefois merci de votre participation et de votre réponse.

David
 

job75

XLDnaute Barbatruc
Re : Suppression d'un UserForm par macro pour MAJ

Bonjour Ternoise, Roland_M,

Placer cette macro dans le fichier à modifier :

Code:
Sub RemplacerUserForm()
'cocher la référence Microsoft Forms 2.0 Object Library
'adapter si nécessaire les noms des 2 UserForms
ActiveWorkbook.VBProject.VBComponents("Userform1").Export ActiveWorkbook.Path & "\Userform1.frm"
With ThisWorkbook.VBProject
  .VBComponents.Remove .VBComponents("UserForm1")
  .VBComponents.Import ActiveWorkbook.Path & "\Userform1.frm"
End With
End Sub
Ouvrir le fichier contenant l'UserForm à copier (donc ce sera le fichier actif) et lancer la macro.

A+
 

job75

XLDnaute Barbatruc
Re : Suppression d'un UserForm par macro pour MAJ

Re,

Chez moi (Excel 2013) 2 fichiers (.frm et .frx) sont créés, si on veut les supprimer :

Code:
Sub RemplacerUserForm()
'cocher l référence Microsoft Forms 2.0 Object Library
'adapter si nécessaire les noms des 2 UserForms
ActiveWorkbook.VBProject.VBComponents("Userform1").Export ActiveWorkbook.Path & "\Userform1.frm"
With ThisWorkbook.VBProject
  .VBComponents.Remove .VBComponents("UserForm1")
  .VBComponents.Import ActiveWorkbook.Path & "\Userform1.frm"
End With
Kill ActiveWorkbook.Path & "\Userform1.frm"
Kill ActiveWorkbook.Path & "\Userform1.frx"
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Suppression d'un UserForm par macro pour MAJ

Re,

Une variante plus élaborée, le fichier source TOTO.xlsm se trouvant dans le même répertoire :

Code:
Sub RemplacerUSF()
'cocher l référence Microsoft Forms 2.0 Object Library
'adapter si nécessaire le nom du fichier source et les noms des 2 UserForms
Application.ScreenUpdating = False
With Workbooks.Open(ThisWorkbook.Path & "\TOTO.xlsm") 'fichier source
  .VBProject.VBComponents("Userform1").Export ThisWorkbook.Path & "\USF.frm"
  With ThisWorkbook.VBProject
    .VBComponents.Remove .VBComponents("UserForm1")
    .VBComponents.Import ThisWorkbook.Path & "\USF.frm"
  End With
  .Close False
End With
Kill ThisWorkbook.Path & "\USF.frm"
Kill ThisWorkbook.Path & "\USF.frx"
End Sub
A+
 

Ternoise

XLDnaute Occasionnel
Re : Suppression d'un UserForm par macro pour MAJ

Bonjour Job75

Je suis pas sûre d'avoir bien compris ou alors cela ne fonctionne pas chez moi (Excel 2010)

J'ouvre le classeur "TATA" et je lance la procédure via le bouton "MAJ"

Cette procédure, ouvre le classeur "TOTO"

jusque la, ça ouvre bien puis bloque à cette ligne

.VBProject.VBComponents("Userform1").Export ThisWorkbook.Path & "\USF.frm"

Erreur 1004 ==> ""L'accès par programme au projet Visual Basic n'est pas fiable""

Dans votre exemple, les UserForm se nome bien "UserForm1" ??

Merci
 

Pièces jointes

  • TATA.xlsm
    24.2 KB · Affichages: 41
  • TOTO.xlsm
    21.4 KB · Affichages: 42
  • TOTO.xlsm
    21.4 KB · Affichages: 39

job75

XLDnaute Barbatruc
Re : Suppression d'un UserForm par macro pour MAJ

Re,

Classique, il faut bien sûr avoir coché l'option :

Onglet DEVELOPPEUR => Sécurité des macros => Paramètres des macros => Accès approuvé au modèle d'objet du projet VBA.

Bonne nuit.
 

Discussions similaires

Réponses
10
Affichages
548

Statistiques des forums

Discussions
312 429
Messages
2 088 354
Membres
103 824
dernier inscrit
frederic.marien@proximus.