IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA Excel]collection et type [Trucs & Astuces]


Sujet :

Macros et VBA Excel

  1. #1
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut [VBA Excel]collection et type
    Bonjour,
    J'ai une collection qui contient des éléments d'un type que j'ai créé.
    Voici un code provoquant une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Type typeTest
        test1 As String
        test2 As String
    End Type
    Public Sub test()
        Dim test As typeTest
        Dim colTest As New Collection
        test.test1 = "test1"
        test.test2 = "test2"
        col.Add test
    End Sub
    Si vous arrivez à modifier pour enlever cette erreur de compilation, c'est bon.

    Message d'erreur:
    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
    J'ai essayé de déclarer en private ou en public rien n'y fait.
    Je ne vois pas comment définir des types dans des modules d'objets publics.
    Qu'est-ce qu'un module d'objets public?

    Le seul truc s'y rapprochant que j'ai trouvé dans la FAQ c'est:http://vb.developpez.com/faq/?page=Langage#renvoi_type
    Mais bon, c'est pour renvoyer un type, le mettre dans ue collection c'est une autre affaire.

    Dans le forum, il y a ça:http://www.developpez.net/forums/viewtopic.php?p=121804, mais je n'y arrive toujours pas.


    Je pourrai sans doute contourner le problème en faisant autrement, mais j'aimerai bien comprendre.

    Merci d'avance.

  2. #2
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par Tan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim colTest As New Collection
        test.test1 = "test1"
        test.test2 = "test2"
        col.Add test
    End Sub
    Ta collection s'appelle colTest par col...

    Tu ne peux pas mettre de variables de type personnalisé dans une collection, uniquement des variables de type simple ou des objets (module de classe = module d'objet public).
    Il y a peut être un moyen en mettant dans la collection l'adresse de ta variable de type personnalisé.

  3. #3
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Merci de ta réponse.

    Pour le nom de la collection, c'était une faute de frappe (j'ai créé un code simple provoquant l'erreur, et je l'ai mal tapé). Mais cela ne change rien au problème.
    Puisque les collections ne peuvent contenir de type utilisateur, j'ai changé de méthode.

    Pourtant rien ne disait le contraire dans l'aide.
    Citation Envoyé par Aide : objet Collection a écrit:
    L'objet Collection constitue un moyen pratique de faire référence à un groupe d'éléments connexes, en les considérant comme un seul objet. Les éléments contenus dans l'objet sont appelés membres. Il leur suffit d'avoir pour point commun l'appartenance à l'objet collection. Ils ne doivent pas nécessairement posséder le même type de données.
    Citation Envoyé par Aide : définition membre a écrit:
    membre :
    Élément d'une collection, d'un objet ou d'un type défini par l'utilisateur.
    Tant pis, je regarderai ce que tu as dis sur l'adresse de la variable.

    Merci beaucoup.

  4. #4
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Avec les adresses:
    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
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
     
    Public Type typeTest
        test1 As String
        test2 As String
    End Type
     
    Public Sub test()
     
        Dim test As typeTest
        Dim test2 As typeTest
        Dim colTest As New Collection
     
        test.test1 = "test1"
        test.test2 = "test2"
        ' ajoute l'adresse de la variable test
        colTest.Add VarPtr(test)
     
     
     
        ' récupère .test1 (4 octets représentant un pointeur sur la chaine .test1)
        CopyMemory VarPtr(test2.test1), colTest(1), 4
        ' récupère .test2 (les 4 octets suivants représentant un pointeur sur la chaine .test2)
        CopyMemory VarPtr(test2.test2), colTest(1) + 4, 4
     
        MsgBox test2.test1 & " " & test2.test2
     
    End Sub
    Pas facile à commenter... il faut avoir des notions sur les pointeurs...

  5. #5
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-EXCEL] Connaitre le type d'un objet
    Par binouzzz19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/03/2009, 16h33
  2. [VBA Excel] Un tableau dynamique dans un type utilisateur?
    Par cyber_N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/07/2006, 19h51
  3. type en vba excel ?
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/07/2006, 15h37
  4. VBA Excel, modifier une lettre type dans word
    Par morgan47 dans le forum VBA Word
    Réponses: 2
    Dernier message: 26/06/2006, 21h02
  5. [VBA-A] Pb de type dans l'Importation de fichier Excel
    Par afossier dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo