Utilisation incorrect du mot clef new [Résolu]

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
cs_mathmax
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour,

J'ai un problème dans access pour l'instantiation d'un type personnalisé.

J'ai écrit :
Public Type MyType
    AA As String
End Type

Puis au clique d'un bouton, j'invoque le code suivant :

    Dim a As MyType
    a = New MyType

J'obtiens l'erreur suivante :
utilisation incorrect du mot clef new. Pourquoi ?

Je peux par contre écrire
    Dim a As MyType

    a.AA = "jdvklfd"

il semble donc qu'il ne soit pas possible d'instantier un type personnalisé. Ou alors il faut lui définir un constructeur ? Quelle serait la syntaxe ?

Mathmax

****************************************http://www.postsharp.org/

10 réponses

Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
parce qu'en VB6 et VBA c'est Set a = Nothing
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
20
Bonjour

MyType est ici une structure.

Dim a as MyType confère à a la structure définie pour MyType
a n'a pas à faire l'objet d'une "instanciation" autre, par "a = New...."
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Comment faire une classe en vba ?

Mathmax

****************************************http://www.postsharp.org/
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
salut,

pour ton exemple tu n'as pas besoin de classe

mais sinon, tu ajoutes une classe à ton projet, nommée MyType
elle contiendra juste :
Public AA As String

et là alors tu pourras l'initialiser par :
    Dim a As New MyType
    a.AA = "jdvklfd"

PS : attention au thème, VBA n'est pas VB6, voir "VB6\langages dérivés\VBA"
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Merci mais ça ne marche pas.

J'ai insérer un module de classe. Ca m' a créer une classe Classe1. Mais quand j'execute ça plante sur

a = New Classe1

le message est "Variable objet ou variable bloc With non définie". Une idée du problème ?

Pardon pour le thème.
Mathmax

****************************************http://www.postsharp.org/
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
où as-tu lu a = New Classe1 ?????
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

http://www.cpearson.com/excel/Classes.aspx

Mathmax

****************************************http://www.postsharp.org/
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
effectivement si après tu lis mal ^^     sans méchanceté

"Dim C As Class1

Set C = New Class1"

donc comme j'ai inqué :
    Dim a As New MyType
    a.AA = "jdvklfd"

et si vraiment tu ne veux pas mettre NEW de suite, alors :
    Dim a As <strike>New</strike> MyType
    Set a = New MyType
    a.AA = "jdvklfd"

ce qui te fait une ligne de plus pour rien...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

D'accord. Et pourquoi on ne peut pas faire
set a = null

Mathmax

****************************************http://www.postsharp.org/
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Désolé, je viens de c#... j'ai un peu du mal.

Merci beaucoup.
Mathmax

****************************************http://www.postsharp.org/