Bonjour,
Je ne suis pas du tout expert dans les modules de classe VBA, mais je vais essayer. Au pire, il va y avoir quelques correcteurs qui devraient passer plus tard. 
Tout d'abord, il ne faut pas oublier que VBA a bien souvent une implantation incomplète, même erratique, de la programmation-objet.
[
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.
Tu ne peux pas inclure une classe dans une autre classe. Même que tu n'en as pas besoin.
Tu as besoin de créer des classes uniques (programmer un/des module de classe) que, tu peux utiliser (instancier) autant de fois que tu veux. Même que tu peux l'utiliser 2 ou plusieurs fois simultanément, pour autant que tu utilises des noms d'objet différents.
Je n'arrive pas à déclarer dynamiquement Finitions As New DoneesFinition
Toujours en principe, cela devrait ressembler à cela, et dans un module standard
1 2
| dim finitions as doneesfinitions 'En principe c'est donneesfinition.
set finitions = new doneesfinitions |
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.
Les propriétés sont pour cela
Ton module de classe sert à obtenir un nouvel objet VBA, similaire à un objet Excel existant. Mais tu ne peux pas en faire une boîte de dialogue, ni un userForm. C'est le même principe que ceci
Range("a1").value = UserForm1.textbox1.value
Disons que tu as une classe qui s'appelle porte.
Tu crées un objet Laporte basé sur la classe Porte et tu décides que la finition de ta porte, ce sera de la laque
1 2 3
| dim Laporte as Porte
set laporte = new Porte
Laporte.finition=Laque (En supposant que tu aies une propriété Finition dans un objet (basé sur une classe) nommé LaPorte |
Puis tu fais du zèle et tu décides de faire deux portes en même temps
1 2 3 4 5 6
| dim LaporteAvant as Porte
dim LaPorteArrière as Porte
set laporteAvant= new Porte
Set LaPorteArrière = new porte
LaporteAvant.finition=Laque (En supposant que tu aies une propriété Finition dans la lasse Porte
LaporteArrière.finition=Peinture |
Mais là, il est trop tard (22h20 chez-moi) pour corriger ton code qui a besoin d'être réécrit considérablement.
L'idée de base c'est que tu construis un ou des UserForm comme normalement que tu appelles de la manière habituelle à partir d'un module standard.
Tu programmes un/des module(s) de classe.
Soit dans le module de l'userForm, soit dans un module standard, tu crées les procédures pour créer tes objets et les utiliser selon les besoins.
Partager