[VBA] Vider le code d'un UserForm sans détruire l'objet UserForm
2 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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 '--------------------------------------------------------
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
'--------------------------------------------------------
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 '--------------------------------------------------------