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

VBA Discussion :

Classe dont une propriété instancie la classe


Sujet :

VBA

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut Classe dont une propriété instancie la classe
    Bonjour à tous,

    je lisais le tutoriel de Charles A. (cafeine) sur la création d'une classe String.

    Il décrit comment créer une classe qu'il nomme clsString pour gérer plus facilement les chaines de caractères. Je me suis posé une question à la page 7. Cette page propose une propriété en lecture seule qui renvoie le n-ième mot de la chaine. Cette propriété est As String

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim maChaine As New clsString
    maChaine.Value = "Bonjour toto"
    Debug.Print maChaine.Length
    Debug.Print maChaine.Mot(2)
    renvoie 12 (le nombre de caractères) puis "toto" (le deuxième mot de la chaine)

    Vu que la propriété est As String, si je souhaite connaitre la longueur du deuxième mot, je dois donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim maChaine As New clsString
    maChaine.Value = "Bonjour toto"
    Debug.Print len(maChaine.Mot(2))
    Ma question est : est il possible de faire en sorte que la propriété Mot soit de type clsString de façon à ce que nous puissions écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim maChaine As New clsString
    maChaine.Value = "Bonjour toto"
    Debug.Print maChaine.Mot(2).Length
    J'ai tenté de bidouiller quelques trucs, mais sans succès, du coup je me demande si oui ou non, c'est une limite des Objets en VBA.

    Je vous remercie pour votre aide

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    On pourrait avoir quelque chose du style :

    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
    Public Property Get Mot(ByVal intIndex As Integer, Optional ByVal strDelim As String = " ") As clsString
    Dim oRet As clsString
    ' découpe la chaîne en fonction du délimiteur
    xSplit2 classStringValue, strDelim
    If intIndex <= UBound(classStringArray) Then
        ' si le numéro du mot recherché est inférieur à la taille du tableau, on renvoie le mot
        Set oRet = New clsString
        oRet.Value = classStringArray(intIndex)
        Set Mot = oRet
    Else
        ' sinon on renvoie une chaine nulle
        Set Mot = Nothing
    End If
     
    End Property
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim maChaine As New clsString
    maChaine.Value = "Bonjour toto"
    MsgBox maChaine.Mot(2).Value
    Dans le Else, soit on défini mot à nothing ou à Set Mot = New clsString, à voir en fonction de comment vous voulez intercepter l'erreur.

    Ici, à priori, le problème ne se pose pas, mais il faut être vigilant à ne pas créer une récursivité infinie :

    La propriété d'un objet crée le même objet et accède à la propriété qui crée le même objet et accède à la propriété de ce second objet en créant le même objet etc...

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/07/2014, 18h41
  2. Réponses: 7
    Dernier message: 15/09/2009, 15h54
  3. Déclencher un événement sur une propriété de ma classe
    Par Gregory.M dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/06/2009, 16h13
  4. [VB.Net] Comment accéder à une propriété de sous-classes ?
    Par druidev dans le forum Windows Forms
    Réponses: 13
    Dernier message: 05/09/2006, 15h14
  5. Réponses: 7
    Dernier message: 06/04/2006, 18h17

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