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 :

pb creation de module de classe (mes débuts)


Sujet :

VBA

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut pb creation de module de classe (mes débuts)
    bonjour,

    Dans mon projet, j'ai

    un module normal qui défini un type de donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Option Explicit
     
    Public Type Coordonnee
        x As Single
        y As Single
    End Type

    un module de classe :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    Option Explicit
     
     
    ' definition des champs
    Private funcName As String
    Private borneInf As Single
    Private borneSup As Single
    Private plotNumber As Integer
    Private intervalX As Single
    Private tabVal() As Coordonnee
     
     
    ' *******************************************
    ' constructeurs
    'Sub ClassFonction()
    '
    '   funcName = ""
    '    borneInf = 0
    '    borneSup = 0
    '    plotNumber = 0
    '    intervalX = 0
    '
    'End Sub
     
     
    ' *******************************************
    ' methodes
     
     
    ' génération des valeurs du tableau
    Sub calculData()
     
        Dim ind As Integer
     
        intervalX = (borneSup - borneInf) / (plotNumber - 1)
     
        ReDim tabVal(plotNumber)
        For ind = 1 To plotNumber
     
            Dim val As Coordonnee
            val.x = (intervalX * (ind - 1)) + borneInf
            val.y = 5 * val.x + 4
     
            tabVal(ind) = val
     
        Next ind
     
    End Sub
     
     
     
     
     
    ' *******************************************
    ' setter
     
    Sub setFuncName(str As String)
        funcName = str
    End Sub
     
    Sub setBorneInf(val As Single)
        borneInf = val
    End Sub
     
    Sub setBorneSup(val As Single)
        borneSup = val
    End Sub
     
    Sub setPlotNumber(val As Integer)
        plotNumber = val
    End Sub
     
     
    ' *******************************************
    ' getter
     
    Sub getTabVal()
        getTabVal = tabVal
    End Sub

    un autre module normal qui contient le code principal de mon programme :
    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
    36
    37
     
    Option Explicit
     
    Sub createTabVal()
     
    Dim lineNum As Integer
    Dim index As Integer
     
     
     
    lineNum = 2
    While Cells(lineNum, 1).Value <> ""
     
        Dim funcObj As New ClassFonction
     
     
        funcObj.setFuncName (Cells(lineNum, 1).Value)
        funcObj.setBorneInf (Cells(lineNum, 2).Value)
        funcObj.setBorneSup (Cells(lineNum, 3).Value)
        funcObj.setPlotNumber (Cells(lineNum, 4).Value)
     
        funcObj.calculData
     
     
        Dim tabTmp() As Coordonnee
        tabTmp = funcObj.getTabVal()
     
     
        For Each objTmp In tabTmp
            Debug.Print ("x: " + objTmp.x + " ;y: " + objTmp.y)
        Next
     
        lineNum = lineNum + 1
    Wend
     
     
    End Sub
    => la ligne : tabTmp = funcObj.getTabVal() me renvoi une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur de compilation
    Fonction ou variable attendue

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bjr,

    Citation Envoyé par boboss123 Voir le message
    [/CODE]
    => la ligne : tabTmp = funcObj.getTabVal() me renvoi une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur de compilation
    Fonction ou variable attendue
    getTabVal est une Sub, il faut une Function pour renvoyer un résultat

    voir ce tuto pour débuter :
    http://heureuxoli.developpez.com/off...age=page8#L8-B

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok merci


    donc j'ai déclaré ma fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function getTabVal() As Coordonnee()
        getTabVal = tabVal
    End Function
    => j'utilise bien le bon type pour le retour de ma fonction ?


    par contre le code suivant pour afficher mes valeurs n'est pas bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dim tabTmp() As Coordonnee
        tabTmp = funcObj.getTabVal()
     
        For Each objTmp In tabTmp
            Debug.Print ("x: " + objTmp.x + " ;y: " + objTmp.y)
        Next
    => a priori, il ne faudrait pas que j'utilise un tableau pour pouvoir utiliser for each : vaut-il donc mieux modifier le type de tabTmp (lequel ?) ou utiliser une boucle for normal ? qu'elle est la meilleure méthode ?


    Dans mon module de classe, comment défini t-on le constructeur(terme utilisé en java, je ne sais pas si on utilise le même terme en vba) ? a priori la méthode que j'utilise (mise en commentaire au début du code de mon module de classe) n'est pas bonne.

    Pour la création du type Coordonee, j'utilise bien la bonne methode (utilisation d'un module juste pour la déclarer) ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    pour le problème du constructeur, j'ai trouvé la réponse ici :
    http://sinarf.developpez.com/access/vbaclass/

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    bjr,

    Citation Envoyé par boboss123 Voir le message
    => a priori, il ne faudrait pas que j'utilise un tableau pour pouvoir utiliser for each : vaut-il donc mieux modifier le type de tabTmp (lequel ?) ou utiliser une boucle for normal ? qu'elle est la meilleure méthode ?
    for each c'est pour une collection
    pour un tableau ça ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim lCpt as long
    For lCpt = lbound(tabTmp) to uBound(tabTmp)
      Debug.Print ("x: " + tabTmp(lcpt).x + " ;y: " + tabTmp(lcpt).y)
    Next

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok , merci

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

Discussions similaires

  1. [VBA] Module de classe et évènement
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 20/03/2013, 23h23
  2. Réponses: 4
    Dernier message: 31/03/2006, 15h16
  3. creation d'objet de classe a partir de string
    Par mencaglia dans le forum C++
    Réponses: 1
    Dernier message: 14/03/2006, 09h56
  4. Réponses: 8
    Dernier message: 22/02/2006, 15h09
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49

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