Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Création dynamique d'un objet d'une classe

5 réponses
Avatar
Pierre
Bonjour,

Je souhaiterias créer un objet d'une classe en indiquant le nom de cette
classe en paramètre de façon à pourvoir choisir dynamiquement l'objet qui va
être créé, et réutiliser le code.
Est-ce possible ?
Et si oui, comment.....

set myobj = new("classedynamique") ???

Merci.

Cordialement.

Pierre.

5 réponses

Avatar
Kawaman
Tu peux regarder du coté de assembly.CreateInstance

Pierre a écrit :
Bonjour,

Je souhaiterias créer un objet d'une classe en indiquant le nom de cette
classe en paramètre de façon à pourvoir choisir dynamiquement l'objet qui va
être créé, et réutiliser le code.
Est-ce possible ?
Et si oui, comment.....

set myobj = new("classedynamique") ???

Merci.

Cordialement.

Pierre.




Avatar
Kawaman
Ooops pardon, je croyais que c'etait sur le groupe .net.
En VB pur je sais pas. Désolé de cette confusion.

Kawaman a écrit :
Tu peux regarder du coté de assembly.CreateInstance

Pierre a écrit :

Bonjour,

Je souhaiterias créer un objet d'une classe en indiquant le nom de
cette classe en paramètre de façon à pourvoir choisir dynamiquement
l'objet qui va être créé, et réutiliser le code.
Est-ce possible ?
Et si oui, comment.....

set myobj = new("classedynamique") ???

Merci.

Cordialement.

Pierre.





Avatar
Jacques93
Bonjour Pierre,
Pierre a écrit :
Bonjour,

Je souhaiterias créer un objet d'une classe en indiquant le nom de cette
classe en paramètre de façon à pourvoir choisir dynamiquement l'objet qui va
être créé, et réutiliser le code.
Est-ce possible ?
Et si oui, comment.....

set myobj = new("classedynamique") ???




Pas sur d'avoir bien compris, mais avec CreateObject, par exemple :

Dim Obj1 As Object, Obj2 As Object

Private Sub Command1_Click()
Set Obj1 = CreateObj("Excel.Application")
Obj1.Visible = True
Set Obj2 = CreateObj("Word.Application")
Obj2.Visible = True
End Sub

Private Function CreateObj(ClassName As String) As Object
Set CreateObj = CreateObject(ClassName)
End Function

--
Cordialement,

Jacques.
Avatar
Pierre
Bonjour,

En fait, mon premier message manque de précisions :

- le contexte est celui d'une application access
- les objets à instancier sont en fait des form
- et je souhaite créer des instances de ces forms, donc passer par les
classes, sans connaître le nom de la classe avant l'exécution.

Le createobject ne marche pas, car dans ce cas les objets doivent être
déclarés dans la base de registre, ce qui, pour des forms access, n'est pas
le cas...

L'objectif est donc de créer une instance d'un form dont la classe est
attribuée dynamiquement.

Pour créer une instance d'objet, on utilise New, et cette instruction
nécessite l'identifiant de la classe.

D'où le problème...

Et je ne suis pas sûr que cela soit gérable en vba.

J'ai essayé un
eval("set myobj = New Form_" & form_name)
ça ne passe pas non plus

Dernière idée : faire un select et codé en dur tous les news myclass... mais
c'est pas très bô

Merci d'avance de vos suggestions.

Pierre.



"Jacques93" a écrit dans le message de news:

Bonjour Pierre,
Pierre a écrit :
Bonjour,

Je souhaiterias créer un objet d'une classe en indiquant le nom de cette
classe en paramètre de façon à pourvoir choisir dynamiquement l'objet qui
va être créé, et réutiliser le code.
Est-ce possible ?
Et si oui, comment.....

set myobj = new("classedynamique") ???




Pas sur d'avoir bien compris, mais avec CreateObject, par exemple :

Dim Obj1 As Object, Obj2 As Object

Private Sub Command1_Click()
Set Obj1 = CreateObj("Excel.Application")
Obj1.Visible = True
Set Obj2 = CreateObj("Word.Application")
Obj2.Visible = True
End Sub

Private Function CreateObj(ClassName As String) As Object
Set CreateObj = CreateObject(ClassName)
End Function

--
Cordialement,

Jacques.


Avatar
Jacques93
Bonjour Pierre,
Pierre a écrit :
Bonjour,

En fait, mon premier message manque de précisions :

- le contexte est celui d'une application access
- les objets à instancier sont en fait des form
- et je souhaite créer des instances de ces forms, donc passer par les
classes, sans connaître le nom de la classe avant l'exécution.

Le createobject ne marche pas, car dans ce cas les objets doivent être
déclarés dans la base de registre, ce qui, pour des forms access, n'est pas
le cas...

L'objectif est donc de créer une instance d'un form dont la classe est
attribuée dynamiquement.

Pour créer une instance d'objet, on utilise New, et cette instruction
nécessite l'identifiant de la classe.

D'où le problème...

Et je ne suis pas sûr que cela soit gérable en vba.

J'ai essayé un
eval("set myobj = New Form_" & form_name)
ça ne passe pas non plus

Dernière idée : faire un select et codé en dur tous les news myclass... mais
c'est pas très bô




N'ayant pas mis le nez dans Access depuis longtemps, peut être :

Private Sub Commande1_Click()
Dim obj As Form

Set obj = OpenForm("Formulaire2")
MsgBox obj.Name
End Sub

Private Function OpenForm(fName As String) As Form
Dim f As Form

Application.DoCmd.OpenForm fName
For Each f In Forms
If f.Name = fName Then
Set OpenForm = f
Exit Function
End If
Next f
End Function

--
Cordialement,

Jacques.