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 Access Discussion :

[VBA] Utilisation de classes


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut [VBA] Utilisation de classes
    Bonjour,

    Je travaille présentement sur un exercice pour pratiquer la programmation de classes dans Access. Voici le topo :

    J'ai 3 tables : une qui contient les membres d'un club automobile. Une seconde table qui contient les voitures avec les infos générales (marque, modele, annee, etc.) Une 3ieme table fait le liens entre les membres du club auto et chacune des voitures qu'il possèdent (avec des infos plus spécifiques sur la voitures comme le # immatriculation, le kilométrage, etc.).

    J'ai donc une classe Membre et une autre classe Voiture. La classe membre possède entre autre une méthode qui permet d'associer un lien entre le membre et une voiture. Voici mon questionnement.

    J'aimerais avoir dans la classe membre une méthode GetListVoiture. Cette méthode me permetterait de retourner la liste des voitures que possède le membre du club auto. Avez-vous une idée de comment je pourrais procéder? Est-il possible que la méthode puisse me retourner la liste des voitures du membre sous une forme de liste objet de la classe voiture ? J'ai vu qu'il y avait la possibilité d'exploiter les collections. Est-ce qu'il y aurait possibilité d'utiliser cette avenue ?

    Merci pour vos suggestions

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Par défaut
    Bonjour,

    Si tes tables sont liées correctement tu ne devrais pas avoir de problèmes.

    Il te suffit de faire un formulaire basé sur une requête dont le critère serait le nom du membre du Club.

    Enfin si j'ai bien compris ce que tu cherche à faire!

    Bonne continuation

  3. #3
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut Re :
    Citation Envoyé par p'tite Sandrine
    Bonjour,

    Si tes tables sont liées correctement tu ne devrais pas avoir de problèmes.

    Il te suffit de faire un formulaire basé sur une requête dont le critère serait le nom du membre du Club.

    Enfin si j'ai bien compris ce que tu cherche à faire!

    Bonne continuation

    Effectivement, c'est une bonne solution. Mais ce n'est pas ce que je cherche à faire. Je dois le faire via une classe (c'est le but de l'exercice).

  4. #4
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut Re :
    Est-ce que des gens ont des pistes de solutiona à ma question ??

  5. #5
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Oui, en utilisant Set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ' code Classe clMembre
    Public Nom As String
    Public Voitures As New Collection
    
    Property Get ListeVoitures()
       Set ListeVoitures = Voitures
    End Property
    
    Private Sub Class_Terminate()
        While Voitures.Count > 1
              Voitures.Remove 1
        Wend
    End Sub
    En espèrant t'avoir mis sur la voie.

  6. #6
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut Re :
    Citation Envoyé par LedZeppII
    Bonsoir,

    Oui, en utilisant Set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ' code Classe clMembre
    Public Nom As String
    Public Voitures As New Collection
    
    Property Get ListeVoitures()
       Set ListeVoitures = Voitures
    End Property
    
    Private Sub Class_Terminate()
        While Voitures.Count > 1
              Voitures.Remove 1
        Wend
    End Sub
    En espèrant t'avoir mis sur la voie.
    Bonjour,

    Effectivement, cela est un bon début. Mais ce que j'aimerais savoir : de quelle façon vais-je devoir initialiser la collection Voitures avec les objets de ma classe Voiture. As-tu un exemple de code de la méthode pour me guider?

    De plus, je me demandais si cette technique pouvait être 'lourde' en traitement.C'est-à-dire est-ce que peut être long à exécuter de retourner une collection d'objet? Est-ce que c'est une bonne possibilité ou vous avez d'autres suggestions ?

    Merci pour vos réponses.

  7. #7
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Et bien la collection est instanciée via New la première fois. Ensuite, c'est à toi de décider quand tu ajoutes une voiture à la collection. Peut être à la création de la voiture ou bien lorsque tu l'a rend disponible à un client, etc.

    Tu vois ce que je veux dire ?

    PS : C'est moi qui ai mis les 5 étoiles à ce sujet. J'aime bien ce genre de question, ça change de d'habitude, et c'est très interessant

  8. #8
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Comme l'a dit Tofalu la collection Voitures est initalisée dans la classe clMembre par le mot clé New.

    Voici un exemple rapide d'utilisation
    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
    Dim Membres As New Collection
    Dim Membre As clMembre, Voiture As clVoiture
    Dim Voitures As Collection ' ou As Object
    Dim iM As Integer, iV As Integer
    
    ' Crée un nouveau membre
    Set Membre = New clMembre
    Membre.Nom = "Paul"
    ' Crée nouvelle voiture
    Set Voiture = New clVoiture
    Voiture.Marque = "Renault"
    Voiture.Modele = "Clio"
    ' Ajoute voiture à la collection
    Membre.Voitures.Add Voiture
    
    ' Crée nouvelle voiture
    Set Voiture = New clVoiture
    Voiture.Marque = "Peugeot"
    Voiture.Modele = "107"
    ' Ajoute voiture à la collection
    Membre.Voitures.Add Voiture
    
    ' Ajoute Membre à la collection
    Membres.Add Membre
    
    ' Crée un nouveau membre
    Set Membre = New clMembre
    Membre.Nom = "Pierre"
    ' Crée nouvelle voiture
    Set Voiture = New clVoiture
    Voiture.Marque = "Peugeot"
    Voiture.Modele = "106"
    ' Ajoute voiture à la collection
    Membre.Voitures.Add Voiture
    ' Ajoute Membre à la collection
    Membres.Add Membre
    
    ' Parcoure de la collection Membres
    For iM = 1 To Membres.Count
      Debug.Print Membres(iM).Nom
      ' Parcoure liste voitures
      Set Voitures = Membres(iM).ListeVoitures
      For iV = 1 To Voitures.Count
          Debug.Print vbTab & Voitures(iV).Modele
      Next
    Next
    
    Set Voiture = Nothing
    Set Membre = Nothing
    ' Libération de la collection
    While Membres.Count > 1
       Membres.Remove 1
    Wend
    Set Membres = Nothing
    En ce qui me concerne, moi j'utiliserai quatre classes.
    Une clase clVoiture qui définit les caractériques d'une voiture.
    Une clase clMembre qui définit les caractériques dun membre.

    Une classe clVoitures pour gérer une Collection de clVoiture.
    Une classe clMembres pour gérer la Collection de clMembre.

    Retourner la collection de voiture n'est pas pénalisant car cela consiste à retourner un pointeur (32 bit) sur la collection existante.

    Question à Tofalu :
    Est-on obligé de détruire les collections créées en supprimant les éléments un par un
    ou bien est-ce géré par la classe Collection quand on écrit Set xxx = Nothing ?

    A+

Discussions similaires

  1. [VBA] Utilisation des gets pour une classe de classe
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/07/2007, 21h30
  2. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  3. utilisation de CLASS dans un formulaire
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/11/2004, 16h38
  4. utiliser des classes dont on n'a pas le source
    Par kocin dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/08/2004, 16h05
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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