XL 2010 Sauver une Userform avec ses contrôles créés par programme !!!

CC76

XLDnaute Nouveau
Bonjour à tous
J'ai besoin d'une Userform qui contiendra environ 50 contrôles de type image. Je n'ai pas envie de créer ces contrôles un par un, à la main, donc je voudrais le faire par programme en VB.
Créer les contrôles, je sais faire; les mettre dans la forme, je sais faire aussi, à condition que ce soit pour afficher la form ensuite. Mais comment faire, une fois que les contrôles sont insérés dans la forme, pour la sauver , avec ses contrôles, en tant que Userform ? (Dans le même projet ou dans un autre , peu importe, à condition que je puisse la récupérer ensuite dans un projet VB Excel avec tous ses contrôles installés.)
Merci d'avance
 
Solution
re
une petite demo comme ca a l'arache vite fait
un userform vierge nommé "UserForm1"(LAISSE LE VIERGE)
donne lui au moins 150 de height quand même hein!!!
un module standard

dans le module standard tu colle ça
VB:
Sub test()
    Dim vbc As Object, vbu As Object, I&, Btn As MSForms.CommandButton, N&
   Set vbu = ThisWorkbook.VBProject.VBComponents("UserForm1") 'ca c'est le vbcomponent userform1
  
   'vbu.designer ' designe l'userform dans vbe
   ' y a plus qu'à :)
    With vbu
        For I = 1 To 6
            Set Btn = .designer.Controls.Add("forms.CommandButton.1") 'traduction:set btn = [l'userform1 dans vbe].controls.add.......
            With Btn ' le reste c'est pareil que si c'etait pour l'object userform affiché...

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Pas certain d'avoir tout compris mais, créez un UserForm modèle avec vos 50 contrôles puis enregistrez le sur votre disque dur.

Dans l'explorateur de projet, click-droit sur le nom du userform et Exportez, vous pourrez l'importer dans n'importe quel autre projet .
1614688210772.png


Cordialement
 

patricktoulon

XLDnaute Barbatruc
bonjour
pour créer des element dynamique en dur!!!!
il te faut faire tes addcontrol sur le designer du vbcomponent("nom de ton userform")
puis sauver ou exporter ton module userform je sais pas le contexte est flou tes explication sont vagues
 

patricktoulon

XLDnaute Barbatruc
re
une petite demo comme ca a l'arache vite fait
un userform vierge nommé "UserForm1"(LAISSE LE VIERGE)
donne lui au moins 150 de height quand même hein!!!
un module standard

dans le module standard tu colle ça
VB:
Sub test()
    Dim vbc As Object, vbu As Object, I&, Btn As MSForms.CommandButton, N&
   Set vbu = ThisWorkbook.VBProject.VBComponents("UserForm1") 'ca c'est le vbcomponent userform1
  
   'vbu.designer ' designe l'userform dans vbe
   ' y a plus qu'à :)
    With vbu
        For I = 1 To 6
            Set Btn = .designer.Controls.Add("forms.CommandButton.1") 'traduction:set btn = [l'userform1 dans vbe].controls.add.......
            With Btn ' le reste c'est pareil que si c'etait pour l'object userform affiché
                .Name = "bouton" & I
                .Caption = "bouton " & I
                .Height = 25
                .Width = 60
                .Left = 12
                .Top = 27 * (I - 1)
            End With

            With .CodeModule ' on ecrit EN DUR!!! LES EVENEMENTS dans le module du userform1
                N = .CountOfLines
                .InsertLines N + 1, "Sub " & Btn.Name & "_Click()"
                 .InsertLines N + 2, vbTab & "MsgBox " & """" & Btn.Caption & """"
                 .InsertLines N + 3, "End Sub"
            End With
        Next

    End With
MsgBox "regarde l'interieur de ton userform maintenant " & vbCrLf & "tu meme te servir des boutons ils sont fonctionnels"
End Sub

va y teste ;)
 

CC76

XLDnaute Nouveau
Alors là, je dis Bravo ! Solution rapide, efficace (j'ai testé, ça marche exactement comme je le veux).
C'est magique !
Comme quoi, mes explications n'étaient pas si vagues que ça puisque tu as trouvé tout de suite ;)
Merci et bonne soirée
 

patricktoulon

XLDnaute Barbatruc
tu veux la méthode pour exporter ton userform aussi ?
exemple on exporte le module userform1 sur le bureau
met ca après le msgbox
tu aura ton module userform sur le bureau que tu pourra importer dans n'importe quelautre fichier
toi qui parlais de sauver le userform ben t es servi ;)

ThisWorkbook.VBProject.VBComponents("UserForm1").Export Environ("userprofile") & "\DeskTop\UserForm1.frm"
 

CC76

XLDnaute Nouveau
Je n'en ai pas besoin pour l'instant, mais je vais le garder précieusement, ça peut toujours servir.
En revanche, si tu sais comment exporter une Userform Excel pour qu'elle puisse être importée dans VB6.0, je suis preneur !:)
 

CC76

XLDnaute Nouveau
En général, quand j'ai besoin d'un .exe , je mets mon programme au point sous excel (parce que l'aide est dispo) et je le passe sous VB6 après (je n'ai pas accès à MSDN). Parfois j'ai des mauvaises surprises. Le dernier truc que j'ai essayé de passer sous VB6, c'était un bête programme pour afficher des listes sur une Userform. Comme je voulais un truc flexible, j'ai créé une form scrollable, et je créé les contrôles à la volée. Sous Excel, ça marche très bien. Mais sous VB6, je me suis fait jeter sur le USF.controls.add et sur le USF.ScrollHeight, refusés tous les 2. J'ai dû modifier mon programme pour utiliser un nombre fixe de contrôles et développer un système de pages de longueur fixe parce que je ne pouvais pas scroller la forme. Peut-être qu'il me manque une librairie, mais je n'ai pas trouvé laquelle. Et en plus, mon install VB6.0 est pourrie apparemment. Chaque fois que je le démarre, j'ai une erreur "erreur automation - Erreur d'accès au registre OLE";
Donc cette fois, j'ai essayé de passer ton code sous VB (Visual Studio 2012), mais là, les deux langages sont trop différents, et je patauge complètement.
Un truc qui me rendrait vachement service, ce serait ton code ci-dessus adapté pour VS 2012 (VB .Net). Quand tu auras 30 secondes (je suis sûr qu'il ne t'en faut pas plus pour le re-coder) ... :)
Merci d'avance.
NB Es tu présent sur un forum VB6 ou .NET ?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 069
Messages
2 085 038
Membres
102 763
dernier inscrit
NICO26