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 :

La portée des variables (et surout des objets) [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut La portée des variables (et surout des objets)
    Bonjour àtous.

    Il y a une question à laquelle j'ai aps trouvé de réponse pour l'insta,t du coup je me tourney vers vous.

    Qeulle est la portée des variables entre les formulaire et les Modules ?
    Je vais prendre mon exemple préci pour être clair.

    J'ai fais un formulaire MainForm et en haut de son code j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Option Compare Database
     
    Public Login As String
    Public Password As String
     
    Public FldrError As Outlook.MAPIFolder
    Public FldrTraite As Outlook.MAPIFolder
    Public Fldr As Outlook.MAPIFolder
     
    Private Sub Lancer_Click()
    Et j'ai fais un module dans lequel j'utilise les trois variables Fldr....

    Mais visiblement ça marche pas, il a pas l'air de me le prendre. Du coup, je passé les Fldr en parameter des Sub que j'ai créé dans le module, mais je trouve que c'est pas très proper et surtout je snes que ça va une source d'ennui avec le ByRef et les ByVal....

    Est-ce que je dois placer mes variables dans le Module en Public ou est ce qu'il y a un truc comme en .NET (Shared ou autre) qui permet de declarer autrement ?
    Et oubliez pas que je suis en 2010, y a peut-être des trucs qui marchaient pas à cette époque.

    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Bonjour,

    Pour moi il ne faut pas créer de variables globales dans un formulaire, ça ne fonctionnera pas.
    Si tu as besoin de ces variables globales il faut les stocker dans un module à part.

    Dans ton cas, vu que tu essaye d'appeler ces variables dans un module, ça simplifierais la chose si elles sont déclarées dans le module directement.
    Ensuite il faut dans tous les cas, les mettre en privée et non public (par convention et par principe). Du coup tu peux rajouter des Getters/Setters si dans ce module si tu as besoin d'accéder à ces données d'un formulaire.

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    ok, merci pour ton aide.

    Je comprends pas le principe et la convention. Si j'ai besoin des variables dans le formulaire et que je le déclare en privée dans le module, comment j'y accède ?

    Je ne sais pas ce qu'est un Getters/Setters. Vu le nom, ça doit ressembler au propriété qu'on fait en .NET. Si tu avais un lien vers une doc Microsoft, ça serait super cool.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Les Getters/Setters sont les fonctions qui te permettent d'accéder aux variables privées.

    Du style dans ton module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Function GetLogin() As String 'Getter
       getLogin = login
    End Function
     
    Public Sub SetLogin(ByRef log As String) 'Setter
       login = log
    End Sub
    En autre ça permet de laisser (dans la programmation orientée objet) de laisser les paramètres d'un objet avec celui-ci (pour pas tout mélanger)
    Exemple si tu as un objet Cercle, tu as ces paramètres:
    -Coord_X
    -Coord_Y
    -Radius

    Vu que ce sont des données propres au cercle, les objets externes ne sont pas censés y avoir accès. Du coup on passe par des fonctions Getters/Setters

    Après si tu tiens VRAIMENT à y avoir accès de ton formulaire, tu rajoute dans celui-ci des champs cachés où tu stockes les variables dedans mais bon...

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonjour,

    J'ai trouvé deux articles(tutoriels) qui expliquent sur la portée des variables en VBA sur DVP : ICI et ICI

    Pour faire simple :
    - les déclarations de variables ou de constantes faites dans un module d'objet d'Access (Formulaire, état) ne peuvent être atteint que dans cet objet.
    - Pour avoir un variable globale pour toute l'application, il faut créer un module globale et non de classe et y faire la déclaration.

    Bonne continuation.

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok, merci pour la leçon.
    ça se rapproche vraiment des Property en .NET

    Sinon, je crois que j'ai usurpé l'utilisation du formulaire dans mon énoncé. En fait je monte un formulaire parce que c'est un point d'entrée sur ACCESS.
    Mais je n'utilise pas le principe du formulaire en lui-meme, je n'utilise que son côté code pour faire mon application. Physiquement dans mon formulaire j'ai surtout un bouton qui déclenche les traitements. Ensuite, en fonction des traitements que je dois faire, je découpe la chose en module pour plus de clarté dans le code.

    Par exemple, j'ai une application où je dois prendre un mail, le dépiauter et envoyer les informations dans un système AS400
    Donc dans le formulaire avec le click du bouton je lance la connexion à l'AS400 et la navigation dans ses menus (code stocké dans un autre fichier ACCESS qui me sert de moteur central)
    Ensuite j'ai un module qui prend le mail et me charge dans des variables les valeurs dont je vais avoir besoins. Dans mon module j'ai fait tout un tas de method et de function pour lire le mail, trouver l'info, la metre en forme, sous différents formats parfois.
    Et enfin, j'ai un autre module qui envoi dans l'ASA400, par saisie simulée (à base de sendKeys spéciaux) et qui fait toute la validation du processus AS400.

    Du coup, mes variables je les declare dans le premier module en Public et comme ça j'y accède dans mon deuxième module sans souci ou dans le code de mon formulaire.

    Mais ce matin j'avais un cas un peu different, je devais verifier des folder dans OutLook (dans lesquels se trouve les mails à travailler) et surtout le faire en premier, donc sur le click du bouton et donc je les ai machinalement déclarer en Public dans le code du formulaire, sauf que ces variables là ne sont pas accessible directement dans les modules.

    Voilà, je viens de dévoiler en public le fruit de mon travail sur les trois deniers mois..... Bon, ça va je suis généreux. Mais du coup, maintenant je maitrise totalement la simulation de saisie sur AS400 à partir du pack Office.
    Je tatonne encore sur des sujets globaux, tel que les accès aux autres morceaux du pack Office ou les portée des variables. ça fait plus de 15 ans que j'ai pas bossé dans Office et je m'aperçois que j'ai vachement perdu de réflexe.

    En tout cas merci pour ton aide. Je pense que je vais clôturer ce sujet, mais je reste ouvert à toute discussion.

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Re-,

    Sinon, je crois que j'ai usurpé l'utilisation du formulaire dans mon énoncé. En fait je monte un formulaire parce que c'est un point d'entrée sur ACCESS.
    Mais je n'utilise pas le principe du formulaire en lui-meme, je n'utilise que son côté code pour faire mon application. Physiquement dans mon formulaire j'ai surtout un bouton qui déclenche les traitements. Ensuite, en fonction des traitements que je dois faire, je découpe la chose en module pour plus de clarté dans le code.
    Non, je ne pense pas que tu as usurpé le terme "utilisation du formulaire". Le formulaire d'accès que tu as créé est bien un objet faisant partie de la collection des objets Formulaires dans ton application Access. Et les codes (modules ou plutôt procédure et/ou fonctions) créés dessus sont comme tu dis devenus des propriétés du formulaire.

    Bonne continuation.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  2. Réponses: 4
    Dernier message: 03/06/2011, 08h20
  3. Réponses: 4
    Dernier message: 08/04/2007, 17h17
  4. Réponses: 2
    Dernier message: 11/10/2006, 11h21
  5. Réponses: 8
    Dernier message: 17/02/2005, 09h05

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