collection d'objets crées Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
J
Jeb
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 13 décembre 2017
Version d'Excel : 2010 FR

Message par Jeb » 13 décembre 2017, 10:52

Bonjour
je n'arrive pas à comprendre pourquoi le code suivant, super simple pourtant, ne fonctionne pas
Sous Excel VBA, j'ai créé un module et j'ai écrit le code suivant

Type TA
a As Integer
b As Integer
End Type

Sub main()
Dim myT As Collection
Set myT = New Collection
Dim t1 As TA
With t1
.a = 1
.b = 2
End With
myT.Add (t1)
End Sub

je reçois le message suivant
"Erreur de compilation : seuls les types définis par l'utilisateur et qui sont définis dans les modules d'objets publics peuvent être convertis depuis ou vers un variant, ou passés à des fonctions à liaison tardive"
Une idée ?
Amicalement
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'656
Appréciations reçues : 220
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 13 décembre 2017, 13:00

Bonjour,

Je ne pense pas que votre code puisse fonctionner.
ci-dessous une proposition en utilisant plutôt un module de classe qu'un Type utilisateur

1- création d'un module de classe nommé TA
Private v1 As Integer, v2 As Integer

Public Property Let a(ByVal valeur As Integer)
    v1 = valeur
End Property
Public Property Get a() As Integer
    a = v1
End Property

Public Property Let b(ByVal valeur As Integer)
    v2 = valeur
End Property
Public Property Get b() As Integer
    b = v2
End Property
2- votre code modifié
Sub main1()
    Dim myT As New Collection
    Dim t1 As New TA
    
    With t1
    .a = 1
    .b = 2
    End With
    
    myT.Add t1
End Sub
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 13 décembre 2017, 13:21

Bonjour, Salut Thev !

Sinon, tu peux faire fonctionner ton type personnalisé avec un tableau :
Type TA
    a As Integer
    b As Integer
End Type

Sub main()
    Dim myT() As TA, i%
    ReDim myT(1)
    For i = 0 To 1
        With myT(i)
            .a = 1 + i * 2
            .b = 2 + i * 2
        End With
    Next i
    For i = 0 To 1
        MsgBox "a=" & myT(i).a & " - b=" & myT(i).b
    Next i
End Sub
Cordialement.
J
Jeb
Jeune membre
Jeune membre
Messages : 23
Inscrit le : 13 décembre 2017
Version d'Excel : 2010 FR

Message par Jeb » 13 décembre 2017, 16:43

super
merci à vous tous pour ces deux propositions.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message