Parcourir les propriétés d'un control sur un UserForm (pour duplication)

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 :

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:

Dranreb

XLDnaute Barbatruc
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

Bonjour.

Savez vous que le nom d'un Userform ne représente pas seulement une seule instance possible de lui même ?
C'est aussi un type de données. Vous pouvez déclarer des U11 As Userform1, U12 As Userform1, les initialiser par Set U11 = New Userform1, les afficher par U11.Show.
Je vous dis ça, bien que ce soit si peu utilisé que je l'avais oublié jusqu'à récemment, parce que ça permettrait d'afficher plusieurs exemplaires d'un Userform en même temps sans avoir besoin d'en avoir plusieurs définis identiques.
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

Bonjour Dranreb,

euh je crois comprendre, mais ne vois pas où vous voulez en venir. Je précisé que je n'ai pas fait un semblant d'embryon d'études d'info donc ma compréhension est limitée.
 

Dranreb

XLDnaute Barbatruc
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

Je ne vois pas non plus où vous voulez en venir à vouloir dupliquer un Userform.
Si c'est pour en afficher plusieurs exemplaires simultanément, ce n'est pas nécessaire.
 

Pierrot93

XLDnaute Barbatruc
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

Bonjour,

un exemple ci joint pour illustrer le propos de Bernard:) que je salue au passage...

bon après midi
@+
 

Pièces jointes

  • classeur2.xlsm
    19.3 KB · Affichages: 20
  • classeur2.xlsm
    19.3 KB · Affichages: 21
  • classeur2.xlsm
    19.3 KB · Affichages: 25

dionys0s

XLDnaute Impliqué
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

Re,
bonjour Pierrot

Étant sur Mac, je ne peux pas utliser la PJ.
Je cherche à dupliquer mon UserForm, non pas pour en afficher plusieurs instances, mais en raison du bug "mémoire insuffisante" sus-mentionné.
 

Si...

XLDnaute Barbatruc
Re : Parcourir les propriétés d'un control sur un UserForm (pour duplication)

salut

autre proposition (que j'utilise de temps à autre, mais ? sur Mac) :
pour copier le contenu, Userform affiché : Ctrl A (sélection des tous les contrôles) puis Ctrl C (copie). Nouvel Userform, Ctrl V pour récupérer la sauvegarde.
A noter que l'on copie aussi les défauts s'il y en a !
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch