[VBA] Utilisation d'un Type personnel dans un dictionary [Résolu]

Signaler
-
 zapoudding -
Bonjour,

Ci-dessous mon code, situé dans un même module.

Type contrainte
    id As String
    type As String
    correct() As String
    correctCommentaire As String
    avertissement() As String
    avertissementCommentaire As String
    erreur() As String
    erreurCommentaire As String
End Type

Sub chargeEnDictionnaireContraintes()
    Dim LineData As String
    Dim tempTabStr() As String
    Dim c As contrainte
    Dim contraintes
    Dim iFilenum
    
    Set contraintes = CreateObject("Scripting.Dictionary")
    
    Open "test.csv" For Input As #iFilenum
    
    
    Do Until EOF(iFilenum)
        Line Input #iFilenum, LineData
        tempTabStr = Split(LineData, "_")
        c = parseContrainte(tempTabStr(1))
        contraintes.Add tempTabStr(0), c
    Loop
    
    MsgBox contraintes("REQ1").id
    
    Close #iFilenum
End Sub


Quand je l’exécute, j'ai l'erreur suivante :



Ma question est donc est-ce possible d'utiliser un type personnel (créé par soi-même) dans un dictionnaire (dictionary) ?

Merci d'avance pour votre réponse.

5 réponses

Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

Un type de type structure ne peut être utilisé que dans le projet où il est déclaré, le fait de vouloir envoyer en-dehors de ce projet (comme par exemple dans une Collection ou un élément COM/OLE (Dictionary par exemple) ) n'est pas possible.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

Pour déclarer une classe, il faut ajouter un nouveau module : Module de classe
Donc, non, contrairement à .NET, VBA ne permet de déclarer une classe (structure et méthodes) ailleurs que dans un module de classe portant le nom de la classe concernée.

Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,
éclaire ma lanterne :
- c'est quoi, parsecontrainte ?
- sous quoi développes-tu, exactement ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Tout d'abord, merci pour vos réponses.

Bonjour,
éclaire ma lanterne :
- c'est quoi, parsecontrainte ?
- sous quoi développes-tu, exactement ?


- C'est une méthode qui parse une ligne et renvoie un objet de type contrainte (le type que j'ai mis au début de mon code).
- Je suis dans l'interface permettant de faire du VBA dans Word (J'y ai accès par l'onglet développeur de word puis Visual Basic)

Bonjour,

Un type de type structure ne peut être utilisé que dans le projet où il est déclaré, le fait de vouloir envoyer en-dehors de ce projet (comme par exemple dans une Collection ou un élément COM/OLE (Dictionary par exemple) ) n'est pas possible.


Il faut donc que je créé une classe et que j'instancie un objet ? Est-ce possible de faire ça dans un même module sur l'interface VBA proposée par Word ?

Merci d'avance.
Re-bonjour,

Merci beaucoup de ta réponse. J'utilise à présent une classe qui reprend mon type et tout fonctionne à merveille.

Bonne fin de journée.