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

Contribuez Discussion :

Utilisation de variables [Toutes versions]


Sujet :

Contribuez

  1. #1
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut Utilisation de variables
    Voici comment créer des variables (qui peut être numérique ou pas) et les utiliser dans les différents éléments d'une base Access.

    Créer un nouveau module, et dedans saisir ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Compare Database
    Dim g_var1 As String
    'Cette fonction permettra d'enregistrer une valeur dans une variable
    Public Function set_var1(var1 As String)
       g_var1 = var1
    End Function
    'Cette fonction permettra de récupérer la valeur d'une variable
    Public Function get_var1() As String
       get_var1 = g_var1
    End Function
    La variable peut être une valeur que l'on veut définir, le code sera donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim i as integer
    i = set_var1(1)            'la valeur var1 sera égale à 1
    i = set_var2(« Bonjour »)    'la valeur var2 sera du texte
    Les valeurs variables peuvent être issues par exemple d'un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim i as integer
    'si l'on veut récupérer la valeur d'un champ
    i = set_var1(Forms!Formulaire1.champ1)
    'peut aussi venir d'une requête
    SQL = "SELECT nb, … FROM … "
    Set oSQL = CurrentDb.OpenRecordset(SQL)
    With oSQL
       Do While Not .EOF
          i = set_var1(oSQL![nb])
          'instruction a exécuté avec la variable
          oSQL.MoveNext
       End With
    oSQL.Close
    Ces variables peuvent être utilisées dans une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
       CHAMP1, CHAMP2 
    FROM
       TABLE1 
    WHERE 
       CHAMP3 = get_var1()
    Dans un formulaire ou un état pour renseigner un champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'cette instruction met la valeur var1 dans le champ1
    Forms!Formulaire1.champ1= get_var1()
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Es-tu sur de ce que tu as écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_var2(« Bonjour »)
    Où est déclaré set_var2 ?

    Sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = set_var1(1)            'la valeur var1 sera égale à 1
    Faux tu affectes à i la valeur de set_var1(1) et non l'inverse.

    Philippe

  3. #3
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_var2(« Bonjour »)
    Où est déclaré set_var2 ?
    C'est un exemple pour montrer que l'on peut mettre au chose que des chiffres. Il suffit de créer autant de variable que l'on veut.

    Citation Envoyé par Philippe JOCHMANS Voir le message
    Sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = set_var1(1)            'la valeur var1 sera égale à 1
    Faux tu affectes à i la valeur de set_var1(1) et non l'inverse.
    La fonction :
    permet d'affecter la variable, il suffit de voir la fonction set_var1(). Ensuite en rappelant la fonction get_var1() on récupère la variable.

    J'espère que mes explications sont claires.

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Personnellement je ne vois pas l'intérêt de cela par rapport à la déclaration d'une variable Public ou le mieux de passage de paramètres dans une routine ou une clause Where d'ouverture de formulaire.

    Si tu pouvais détailler cet intérêt.

    Philippe

  5. #5
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Salut,

    L'intérêt est que la variable get_var1() peut être utilisée n'importe où dans Access, ensuite tant que l'on ne modifie pas la valeur, elle peut être utilisée dans un Formulaire, un Module, une Macro ou une Requête.

    Exemple : à l'ouverture d'un formulaire cela charge une données dans une variable, ensuite on ferme le formulaire et la variable contient toujours la valeur.

    J'espère que mes explications sont claires...
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par zoom61 Voir le message
    L'intérêt est que la variable get_var1() peut être utilisée n'importe où dans Access, ensuite tant que l'on ne modifie pas la valeur, elle peut être utilisée dans un Formulaire, un Module, une Macro ou une Requête.
    C'est pareil pour une variable déclarée en Public dans un module.

    Philippe

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Effectivement, je ne connaissais pas cette particularité...

    Cela revient au même en plus simple.

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  8. #8
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Bonjour,

    j'arrive un peu tard dans ce débat, mais je préfère nettement la (structure de la) formule que préconise Zoom61 dans son introduction à l'utilisation d'une variable publique, avec quelques nuances :
    - ton premier message est, à très peu de choses près, un objet métier

    - remplace le module standard par un module de classe, nommé pour représenter ce qu'il va contenir : le nom d'une table ou d'un objet traité dans ton Formulaire1 (et ailleurs!).
    Par exemple, si ton application gère une école, des cours, des étudiants..., une classe cl_Etudiant. Il y en aura d'autres, pour chaque objet traité : cl_Cours, cl_Matiere...)
    - remplace les 2 subs GET_var1 et SET_var1 par une propriété GET/LET (remarque : le terme Set est normalement réservé aux objets.):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Compare Database
    Option Explicit
    Dim m_Nom As String
    'Cette propriété permettra d'enregistrer une valeur dans une variable
    Public Property Let Nom(NouveauNom As String)
       m_Nom = NouveauNom
    End Property
    'Cette propriété permettra de récupérer la valeur d'une variable
    Public Property Get Nom() As String
       Nom = m_Nom
    End Property
    Petite remarque : quel que soit le module (classe ou standard), ta variable g_var1 n'a de portée qu'à l'intérieur du module -> préfixe de module m_var1
    Si tu veux que cette (ces) valeur(s) soi(en)t visible(s) partout, tu déclares l'objet au démarrage de l'application (exemple avec macro Autoexec qui lance la fonction Demarrage(), et module standard de démarrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Option CompareDatabase
    Option Explicit
     
    'Objet public
    Public EtudiantActif As clEtudiant
     
    Public Function Demarrage()
        Set EtudiantActif = New clEtudiant
        [...] 'lancement de l'application
    End
    Et voilà !
    Enfin, tout formulaire, module standard ou autre peut changer ou lire la valeur avec un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        'lire la valeur
        if EtudiantActif.Nom = "William Gates" then
             'changer la valeur
             EtudiantActif.Nom = "Bill Gates"
        End If
    Sans oublier que tu peux, à tout moment, détruire l'objet si tu n'en as plus besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Set EtudiantActif = nothing
    Les principaux avantages :
    Facilité :
    - ça va aussi vite de faire un module de classe qu'un module standard,
    - avec mzTools, tu crées les 2 propriétés Get/Let en un clic (voir aussi la version courte ci-dessous)
    Souplesse :
    - tu n'es pas limité par le nombre, et surtout pas par le type des variables : chacune a son type, tu peux ajouter autant d'objets que tu veux, et chaque objet peut avoir autant de propriétés que nécessaire. Et puis, des méthodes aussi, mais pas tout à la fois...
    Code structuré :
    - au lieu d'avoir une flopée de variables publiques + ou - cohérentes, tu les regroupes dans des objets : clarté du code très lisible, facile à faire évoluer.
    Puissance accrue :
    - tu vas pouvoir exécuter du code au moment du changement de valeur, ou de la lecture. The sky is the limit!
    Portée variable :
    - L'objet EtudiantActif peut être public, ou utilisé seulement dans un formulaire ou un seul module (je sais, ce n'est pas ton but ici, mais c'est une possibilité en plus que tu utiliseras certainement un jour)

    Un grand nombre d'objets métier seront très proches de la structure de tes tables : 1 objet par table, 1 propriété par champ. En fait, seulement les objets et les propriétés que tu as besoin de "partager". Finalement assez simple à gérer,et beaucoup plus facile à déboguer ensuite.

    Enfin, juste pour faire plaisir à Philippe, rappelons que la version simple de cet objet avec sa propriété, tient en une ligne. Même module de classe, même déclaration d'objet au démarrage, même utilisation n'importe où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Compare Database
    Option Explicit
    Public m_Nom As String
    Par contre, j'aimerais insister sur un point : tu me diras si je me trompe sur tes intentions, mais j'ai le sentiment que tu veux créer une sorte de variable universelle, ou tu vas mettre des tas de choses différentes, selon le moment ou tu l'utilises.
    Si c'est le cas, je crie au meurtre : gros gros danger de confusion, de bogues indécelables : qui met quoi, où, quand, comment, pourquoi ???
    C'est pour cela que la programmation objet a été inventée : y voir clair, nommer ce qu'on traite et regrouper dans un seul et même objet tout ce qui le concerne. Nos PCs aujourd'hui ont assez de RAM pour traiter cela, alors écrivons du code propre et lisible : on gagnera beaucoup de temps.
    Développement Office, support technique, assistance, sur place (Loire atlantique, Vendée, Maine et Loire) ou à distance.

  9. #9
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Bonjour Papy Turbo,

    J'ai mis ce code car à une époque j'avais besoin d'utiliser des variables, et je n'avais pas trouvé autre chose...

    Maintenant le comment utiliser ce genre de variable, je n'y avais pas pensé.
    Toutes les remarques sont bonnes à prendre. Et le fait d'utiliser ou pas ma méthode plutôt que la variable publique à chacun de choisir

    Merci pour la remarque et les explications.

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En tout cas, merci à tous, je viens de comprendre plein de chose en un seul topic ! vous devriez en faire un tutoriel bien propre, exploitable plus facilement

    Bonne soirée

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    en alternance
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 39
    Points
    39
    Par défaut Question :
    Bonjour à tous,
    Tout d'abord merci de ton tuto !!
    Voila ma petite question, je voudrais savoir si je déclare 2 variable en vba dans le code d'un bouton. Est ce que ces deux variables je peux les utiliser dans une requête access qu'on fait grâce a l'assistant ou non de requête ?
    je te remercie par avance
    cordialement

  12. #12
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Grég's Voir le message
    Voila ma petite question, je voudrais savoir si je déclare 2 variable en vba dans le code d'un bouton. Est ce que ces deux variables je peux les utiliser dans une requête access qu'on fait grâce a l'assistant ou non de requête ?
    Oui, il suffira de mettre get_var1().
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    en alternance
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 39
    Points
    39
    Par défaut Merci !!!!!!!!!
    Merci de ta réponse !
    cdlt

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    en alternance
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 39
    Points
    39
    Par défaut Encore une question :)
    rebonjour,
    du coup dans ma requête au lieu de demander l'entrer des deux variable comment je fait pour que la requête les prennent automatiquement ?
    merci

  15. #15
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Grég's Voir le message
    du coup dans ma requête au lieu de demander l'entrer des deux variable comment je fait pour que la requête les prennent automatiquement ?
    C'est dit dans le premier post :
    Ces variables peuvent être utilisées dans une requête :
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    en alternance
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 39
    Points
    39
    Par défaut
    oui j'ai vu merci ^^
    mais je parle de ces requête las
    http://www.google.fr/imgres?imgurl=h...ed=0CFoQrQMwEw


    cordialement

  17. #17
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 609
    Points
    58 609
    Billets dans le blog
    11
    Par défaut
    Oui c'est bien la même chose, il suffit de mettre get_var1() à la place de ton [Variable ?] dans le critère.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    en alternance
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 39
    Points
    39
    Par défaut
    je vais essayer alors
    merci

  19. #19
    Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Août 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2015
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Merci
    Merci pour cette astuce : c'est génial et cela m'a bien aidé !
    Mais pourquoi pas de variable public dans Access !
    En tout cas, merci !

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

Discussions similaires

  1. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 18h25
  2. Réponses: 4
    Dernier message: 11/07/2005, 12h03
  3. Réponses: 7
    Dernier message: 07/09/2004, 15h16
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 14h58
  5. Utiliser des variables d'environnements
    Par Xam335 dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/08/2004, 15h15

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