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

[VBA] Vider le code d'un UserForm sans détruire l'objet UserForm

2 réponses
Avatar
HD
Bonjour,

J'ai tout une série de classeur sur lesquels je dois détruire un code module
et le code d'un UserForm afin de le remplacer par des nouvelles lignes de
codes.

Pour ce qui est de détruire le code module pour le recréer avec le nouveau
code tout fonctionne:

Function CopieCodeModule()
Dim S As String, Wbk As Workbook

'module à copier
With ThisWorkbook.VBProject.VBComponents("ModFactu").CodeModule
S = .Lines(1, .CountOfLines)
End With

Set Wbk = Workbooks("Budget.xls")
UnprotectVBProject Workbooks("Budget.xls"), "mdp"

'détruire le module à mettre à jour s'il existe
On Error Resume Next
With Wbk.VBProject.VBComponents
.Remove .Item("ModFactu")
End With
On Error GoTo 0
'ajouter un nouveau module et copier le code
Wbk.VBProject.VBComponents.Add(1).Name = "ModFactu"
With Wbk.VBProject.VBComponents("ModFactu").CodeModule
.AddFromString S
End With
End Function

Par contre, pour le UserForm je ne vois pas comment détruire juste le code ?
éventuellement, la destructino du UserForm et l'importation du nouveau via
un fichier me conviendrait également...

Merci d'avance pour votre aide,

HD

2 réponses

Avatar
HD
Je viens de trouver la solution avec cet exemple :

Sub Importer_Exporter_Userform()
Dim Fichier As String

'Déterminer le nom et l'emplacement du fichier
'temporaire pour l'exportation-importation.
'Extension du fichier = .Frm
Fichier = "c:denis.frm"

'Exporte le formulaire(userform1) dans fichier temporaire
'Attention, Userform1 = Propriété Name de l'objet formulaire
ThisWorkbook.VBProject.VBComponents("Userform1").Export Fichier

'Importe dans le nouveau classeur le formulaire.
'Si un formulaire porte déjà ce nom dans le classeur de
'destination, la procédure va se planter
Workbooks("NomClasseurDestination.xls").VBProject.VBComponents.Import
Fichier

'Destruction du fichier temporaire
Kill Fichier

End Sub

@+
HD
Avatar
MichD
Bonjour,

Je pense que tu te compliques un peu la vie.
Voici 2 procédures qui suppriment tantôt tout
le code du formulaire où seulement une procédure
de ce dernier.

'--------------------------------------------------------
Sub test()
'Pour supprimer tout le code d'un formulaire
With ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule
.DeleteLines 1, .CountOfLines
End With
End Sub

'--------------------------------------------------------
Sub Test1()
'Pour supprimer seulement une procédure située dans un formulaire
Dim Début As Long, NbLigne As Long
Dim NomProcédure As String

'Nom de la procédure à supprimer dans le formulaire
NomProcédure = "CommandButton1_Click"

With ThisWorkbook.VBProject.VBComponents("Userform1").CodeModule
'Ligne où débute procédure si elle existe
Début = .ProcStartLine(NomProcédure, 0)
If Début > 0 Then
'Si la procédure existe, dénombrer nombre
'de lignes de la procédure
NbLigne = .ProcCountLines(NomProcédure, 0)
'Supppression de la procédure
.DeleteLines Début, NbLigne
End If
End With
End Sub
'--------------------------------------------------------

MichD
---------------------------------------------------------------