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 :

Récupération d'une variable classe d'une fonction dans un sub [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 7
    Par défaut Récupération d'une variable classe d'une fonction dans un sub
    Bonsoir à tous,

    Je viens vers vous car je ne parviens pas à récupérer un objet instancié que j'ai défini dans une classe module retournées par une fonction supposée retourner ce type d'objet.

    Voici le code pour y voir plus clair :

    Ici nous retrouvons la partie du code contenue dans le module de classe appelé "clsMaxDrawdown"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Option Explicit
     
    ' Creation de la classe destinee a contenir toutes les valeurs utiles du Maximum Drawdown
     
    Public perte As Currency
    Public indiceMax As Integer
    Public indiceMin As Integer
    Dans mon module "Fonctions" je définie ma fonction "maxDrawDown" qui retourne une valeur du type "clsMaxDrawDown"
    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
    29
    30
    31
    32
    33
    34
    35
     
    Function maxDrawDown(data() As Currency) As clsMaxDrawdown
     
       Dim min As Currency, max As Currency
       Dim i, j As Integer
     
       Dim MDd As New clsMaxDrawdown
     
       min = data(0)
       max = data(0)
       MDd.perte = 0
     
       For i = 0 To UBound(data())
     
        If data(i) > max Then
            max = data(i)
            min = max
            j = 0
        End If
     
        If data(i) < min Then
            min = data(i)
            j = j + 1
            If (min - max) < MDd.perte Then
                MDd.perte = min - max               ' On recupere la valeur du Maximum Drawdown
                MDd.indiceMin = i                       ' Ansi que la position du min
                MDd.indiceMax = i - j
            End If
        End If
     
       Next i
     
       Set maxDrawDown = MDd
     
    End Function
    Et enfin j'appelle cette fonction dans mon module "Main" dans le sub "BoutonTF"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub BoutonTF()
        Dim MDd As New clsMaxDrawdown
        Dim chemin As String
        chemin = ActiveWorkbook.Path & "/data/STF.txt"
        Call DataFileToArray(chemin, " ")
        MDd = maxDrawDown(data())
        oshTF.Cells(5, 3) = CDbl(MDd.perte)
    End Sub
    Lorsque j'exécute "Sub BoutonTF()" j'obtiens l'erreur suivante :
    Erreur d'exécution '438':
    Propriété ou méthode non générée par cet objet
    Le débogage pointe alors sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MDd = maxDrawDown(data())
    J'ai essayé différentes méthodes mais je n'ai pas réussi à résoudre mon problème seul...

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour

    Essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MDd = maxDrawDown(data())

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 7
    Par défaut
    Bonjour Patrice740, merci pour ton aide ça a marché c'est bon !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,
    Sinon, vu l'utilisation que tu sembles en faire, tu aurais pu simplement définir un Type personnalisé plutôt qu'une classe :
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Type varMaxDrawDown
        perte As Currency
        indiceMax As Integer
        indiceMin As Integer
    End Type
    A toi de voir

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 7
    Par défaut
    J'avais commencé par définir un type en effet mais ne parvenant pas à faire tourner mon code en cherchant sur internet j'ai voulu m'inspirer d'un module de classe, ce qui n'a pas beaucoup mieux marché comme tu as pu le voir.

    En effet créer une classe pour ce que j'en fais n'est pas très pertinent... A revoir donc, merci du conseil.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/08/2017, 10h58
  2. Réponses: 1
    Dernier message: 28/03/2011, 14h00
  3. Réponses: 1
    Dernier message: 11/12/2007, 18h45
  4. Réponses: 2
    Dernier message: 07/11/2007, 19h19
  5. [Smarty] nom de variable composé d'une chaîne et d'une variable
    Par Philoulheinz dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 17/05/2007, 11h13

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