Bonjour,
J'ai un doute sur la faisabilité de ce que je veux faire avec des Classes.
Le code que je tente de développer va utiliser plusieurs userform qui s’appellent en cascade a savoir : "Nouvelle construction" -> on clique sur porte on ouvre l'userform "Portes", dans lequel il y des frames et dans certaines frames il y a le bouton "Finition" qui ouvre un autre userform ou l'on a des choix de finition.
Mon idée c'est qu'as la création de chaque "porte" on crée uns classe qui s’appellerait lesportes() dans lequel il y a des classes lesframes qui s'ajouterais dynamiquement a mon objet lesportes.
Voici ce que j'essai de faire :
Voila, j'ai essayé d'expurger un max de code inutile à la compréhension du problème qui est double :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 '----DANS LE MODULE NORMAL----- Public LesFrames() As LesFrames, CompteurFrame As Integer Public USF As UserForm Sub Acceuil() Set LaPorte = New LesPortes PorteV2.Show 0 End Sub Sub IntegrerTousLesControl() Dim ctu As MSForms.Control For Each ctu In USF.Controls Select Case TypeName(ctu) Case Is = "Frame" If Left(ctu.Tag, 1) = "F" Then Call ClasseDeFrame(ctu) End Select Next ctu End Sub Sub ClasseDeFrame(ctu As MSForms.Control) ReDim Preserve LesFrames(0 To CompteurFrame) Set LesFrames(CompteurFrame) = New LesFrames With LesFrames(CompteurFrame) .Caption = ctu.Caption .Tag = ctu.Tag .Name = ctu.Name End With End Sub '----DANS LE USERFORM----- Private Sub UserForm_Initialize() Set USF = Me Call IntegrerTousLesControl End Sub '----DANS LE MODULE DE CLASSE LesFrames----- Private mTag As String Property Get Tag() As String ' Propriété en lecture Tag = mTag End Property Property Let Tag(Tag As String) ' Propriété en écriture mTag = Tag Dim InfosTag() As String, i As Integer If InStr(Tag, ",") > 0 Then InfosTag = Split(Tag, ",") If UBound(InfosTag) > 1 Then For i = 2 To UBound(InfosTag) Select Case InfosTag(i) Case Is = "Finitions" Public Finitions As New DoneesFinition ' <------ Ca veux pas !!! End Select Next i End If Else Debug.Print ("Probleme avec le Tag du frame " & mCaption & " qui devrait avoir une virgule !!!!") End If End Property
Je n'arrive pas à déclarer dynamiquement Finitions As New DoneesFinition et je ne sais pas du tout comment lui demander de mettre les variables frame dans LaPorte.
L'idéal serait de pouvoir aller rechercher plus tard une info dans LaPorte.Leframe(2).Finition.Laque par exemple.
Le truc en plus c'est que je pourrait fort bien le faire non-dynamiquement mais je risque d'avoir plein de cas (et autant de frame/userform) différent et ce n'est surement pas moi qui vais les créer et j'aimerais donc "soulager" mon ami qui devra lui, uniquement créer des userform et mettre ce qu'il faut dans les tag des différents contrôles et ne pas entrer de code.
Bon désolé si mon explication est très fouillies, c'est que ma compréhension de "comment je devrait faire" l'est aussi.
MErci d'avance si vous avez lu jusque la![]()
Partager