dionys0s
XLDnaute Impliqué
Bonjour le forum !
alors mon objectif est de dupliquer un userform, mais sans l'exporter. En gros je suis sur Mac et pour je ne sais quelle raison, il est impossible d'exporter mon userform. Celui-ci fonctionne très bien, il est utilisable et tout et tout, mais impossible de l'exporter (mémoire insuffisante qu'il me dit), que ce soit manuellement ou en VBA. Bref, j'ai donc commencé une petite sub pour créer un nouveau classeur vierge qui ne contiendrait que le userform recréé (enregistrer mon classeur sous un nouveau non en ayant dégagé tout le reste ne marche bien sûr pas non plus). Ce qui donne ceci :
À ce stade, j'arrive bien à recréer un UserForm qui contient les mêmes objets, mais impossible de parcourir les propriétés de chaque contrôle créé pour y mettre les valeurs propriétés correspondantes de OldCtrl.
Si quelqu'un a une idée je suis über preneur.
D'avance merci pour votre aide
dionys0s
alors mon objectif est de dupliquer un userform, mais sans l'exporter. En gros je suis sur Mac et pour je ne sais quelle raison, il est impossible d'exporter mon userform. Celui-ci fonctionne très bien, il est utilisable et tout et tout, mais impossible de l'exporter (mémoire insuffisante qu'il me dit), que ce soit manuellement ou en VBA. Bref, j'ai donc commencé une petite sub pour créer un nouveau classeur vierge qui ne contiendrait que le userform recréé (enregistrer mon classeur sous un nouveau non en ayant dégagé tout le reste ne marche bien sûr pas non plus). Ce qui donne ceci :
VB:
Public Sub DuplicateUserForms(ByVal VBProj As VBIDE.VBProject)
Dim OldComp As VBIDE.VBComponent, NewComp As VBIDE.VBComponent
Dim Prop As VBIDE.Property, OldCtrl As MSForms.Control, NewCtrl As MSForms.Control
For Each OldComp In VBProj.VBComponents
If OldComp.Type = VBIDE.vbext_ComponentType.vbext_ct_MSForm Then
With Excel.Application.Workbooks.Add
Set NewComp = .VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_MSForm)
With NewComp
'Copie des propriétés du UserForm
On Error Resume Next
For Each Prop In OldComp.Properties
.Properties(Prop.Name).Value = Prop.Value
Next Prop
On Error GoTo 0
'Ajout des contrôles
For Each OldCtrl In OldComp.Designer.Controls
Set NewCtrl = .Designer.Controls.Add("Forms." & VBA.Information.TypeName(OldCtrl) & ".1")
'Parcourir les propriétés du contrôle : j'y arrive pô
On Error Resume Next
With NewCtrl
End With
On Error GoTo 0
Next OldCtrl
End With
End With
End If
Next OldComp
End Sub
À ce stade, j'arrive bien à recréer un UserForm qui contient les mêmes objets, mais impossible de parcourir les propriétés de chaque contrôle créé pour y mettre les valeurs propriétés correspondantes de OldCtrl.
Si quelqu'un a une idée je suis über preneur.
D'avance merci pour votre aide
dionys0s
Dernière édition: