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

IHM Discussion :

Stocker la valeur d'une zone de texte [AC-2013]


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut Stocker la valeur d'une zone de texte
    bonjour,

    j'ai souhaiterais savoir par quel moyen je peux stocker la valeur d'une zone de texte lorsque je ferme un formulaire et la reporter sur le Formulaire que je vais ouvrir.

    je m'explique:

    j'ai un formulaire login et mot de passe, et lorsque que je me "connecte" je récupère dans mon menu général la valeur du login dans une zone de texte avec ce morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Txtlogg = Forms.F_login.Txtlogin.Value
    Ce code fonctionne lorsque j'ai un seul point d'accès, cependant, lorsque je peux accéder à un formulaire depuis plusieurs endroits ça ne fonctionne pas

    exemple : F_login --->F_menu --->F-Achat ca va fonctionner, mais si de F_Achat je veux retourner à F_menu ca ne va pas fonctionner car la valeur insérée est celle de F_Login

    J'espère avoir été assez clair dans mes explication,

    d'avance merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    3 possibilités pour garder une information: une table, une fonction renvoyant une variable globale ou alors la propriété OpenArgs du formulaire.
    Pour la table, c'est facile il suffit d'utiliser Dlookup pour récupérer la variable préalablement renseignée dans F_Login.
    Pour la variable globale, la fonction renvoie la valeur alimentée dans le formulaire F_Login
    dans F_Login:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gstTextLogin = Me.Txtlogg
    dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global gstTextLogin As String
    dans la fonction du module standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function fRenvoieTextLogin() As String
    fRenvoieTextLogin = gstTextLogin
    End Function
    Avec Openargs, il faut systématiquement ouvrir chaque formulaire avec l' OpenArgs du formulaire appelant :
    exemple dans F_Login pour ouvrir F_menu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.OpenForm "F_Menu", acNormal, , , , ,Me.Txtlogg
    dans F_Menu pour ouvrir F_Achat ou un autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "F_Achat", acNormal, , , , ,Me.OpenArgs
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Et au chapitre des "variables globales", tu peux utiliser la nouvelle (depuis 2007) collection TempVars qui sont des variables globales "permanentes".
    Elles resistent aux plantages et autres problemes qui font perdre leur valeur aux variables globales, tant que tu ne sors pas de l'application.
    Elles peuvent meme etre utilisees directement dans les requete, il semblerai (je l'ai lu mais pas teste).

    • Assignation : TempVars("NomTaVariable")=UneValeur.
    • Lecture dans du code : UneVariable = TempVars("NomTaVariable").
    • Lecture dans une requete : [TempVars]![NomTaVariable].


    Note que comme toutes les variables gloables, elles sont a manipuler avec precaution car elles peuvent etre modifiees de partout dans l'application ce qui peut induire des bugs assez sournois et difficiles a corriger.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    j'aime bien l'option avec le module, l'avantage c'est qu'il est indépendant.

    étant novice, j'ai un peur de n'avoir pas tout suivi.

    pour essayer de comprendre au mieux:

    si on appelait la zone de texte txtlogin du formulaire F_login " Camion", la zone de texte présente dans le formulaire F_menu "voiture" et la zone de texte de dans tous les autres formulaires "Moto"

    1 dans F_Login :
    2 Dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Global gstCamion As String
    Function fRenvoieCamion() As String
    fRenvoieCamion = gstCamion
    End Function
    3 Dans le formulaire F_login pour ouvrir le F_menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.OpenForm "F_Menu", acNormal, , , , ,Me.Voiture
    4 Dans le formulaire F_menu pour ouvrir tous les autres formulaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "F_Achat", acNormal, , , , ,Me.OpenArgs
    Désolé c'est un peu cucul mais c'est juste pour savoir si la distinction est bonne ou non.

    Aussi, le point 4 fonctionne t'il aussi si je le place dans F_achat pour ouvrir F_peu importe ?


    bien à toi,

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Si tu passes tes donnees comme cela tu n'as pas besoin de la variable globale puisque ta donnees est dans le parametre OpenArgs du formulaire.

    A quoi va servir ton parametre ? A filtrer les valeurs en fonction du type de vehicule ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    Non du tout, c’est bien par rapport au login d’un utilisateur. L’idée est, de renvoyer sur chaque formulaire le login afin de pouvoir gérer les accès. Chaque utilisateur appartient à un groupe donc en ayant le login je peux aller rechercher dans la table via dlook le groupe auquel il appartient. Je m’embrouille un peu dans le nom des commandes avec la solution donnée donc j’ai changé les noms pour avoir confirmation que j´avais bien compris

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Si tu te base sur le login, pourquoi ne pas recuperer le code de Windows.

    Si tu prevoies de l'utiliser dans une requete, il faut faire une fonction autour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function LireUserCode() as string
       LireUserCode=Environ$("UserName")
    end function
    Attention, ca peut etre une plaie quand tu fais tes tests puisque tu ne peux pas te faire passer pour quelqu'un d'autre.
    Une astuce pour contourner cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function LireUserCode() as string
       if Not EstDev() then
          LireUserCode=Environ$("UserName") 'Ca c'est le vrai code
        else
          LireUserCode="IciLeCodeVoulu" 'Force le code utilisateur pour simuler quelqu'un
      end if
    end function

    EstDev() est une function qui te retourne vrai quand tu es en "dev".

    La mienne ressemble a cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function EstDev() as Boolean
       EstDev=currentproject.name like "*_Dev.*" 'Retourne true si le nom du fichier se termine par "_Dev".
    end function

    sinon, l'idee de la variable gloable est de ne pas passer le parametre a chaque fois mais de l' "avoir sous la main" quand tu en as besoin.
    Donc a priori
    1. ou tu passes le parametre et tu te sers de OpenArgs
    2. ou tu n'utilises pas OpenArgs et tu vas lire le parametre directement.


    Perso, je te recommanderai ne pas utiliser la variable gloable mais je reconnais que cela peut etre penible de passer le code utilisateur a chaque fois comme un parametre.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    hello,

    je n'y arrive pas, ou alors je suis trop null....

    mais en cherchant je suis tombé sur cette ligne dans mon code ne servirait elle pas à stocker mon login ?
    Il s'agit de la lignes 11.

    si oui comment faire pour renvoyer cette ligne à chaque formulaire que j'ouvre sachant que lorsque j'ouvre le formulaire suivant je ferme celui-ci

    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
    Private Sub Connexion_Click()
    Me.Requery
    Dim sql, User_id, User_groupe As String
    Dim rs As DAO.Recordset
    Static i As Byte
    sql = "SELECT * FROM T_user WHERE LOGIN = '" & Me.Texte1 & "' AND MDP ='" & Me.Texte3 & "'"
    Set rs = CurrentDb.OpenRecordset(sql)
    If Not rs.EOF Then
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
        DoCmd.Close acForm, "F_Login"
        User_id = rs("Login").Value
        User_groupe = rs("GROUPE").Value
    Else
        MsgBox "identifiant et/ou mot de passe incorrect!", vbInformation, "Connexion"
        i = i + 1
    End If
    If i = 3 Then
    MsgBox "Vous avez dépassé le nombre de tentative autorisées", vbCritical
    DoCmd.Quit
    End If
    End Sub

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    attention aux déclarations de variables sur une seule ligne: il faut préciser le type pour chaque variable, sinon le type par défaut sera Variant.
    Comme je te l'ai proposé, tu peux ouvrir le premier formulaire appelé depuis F_Login en lui passant le paramètre Login:
    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
    Private Sub Connexion_Click()
    Me.Requery
    Dim sql As String, User_id As String, User_groupe As String
    Dim rs As DAO.Recordset
    Static i As Byte
    sql = "SELECT * FROM T_user WHERE LOGIN = '" & Me.Texte1 & "' AND MDP ='" & Me.Texte3 & "'"
    Set rs = CurrentDb.OpenRecordset(sql)
    If Not rs.EOF Then
        User_id = rs("Login").Value
        User_groupe = rs("GROUPE").Value
        DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal,  User_Id
        DoCmd.Close acForm, "F_Login"
    Else
        MsgBox "identifiant et/ou mot de passe incorrect!", vbInformation, "Connexion"
        i = i + 1
    End If
    If i = 3 Then
        MsgBox "Vous avez dépassé le nombre de tentatives autorisées", vbCritical
        DoCmd.Quit
    End If
    End Sub
    ensuite dans le formulaire appelant, tu peux utiliser OpenArgs pour alimenter un contrôle indépendant sur l'évènement Form_Open par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Open(Cancel As Integer)
    If Not IsNull(Me.OpenArgs) Then Me.MonControle = Me.OpenArgs
    End Sub
    et depuis le formulaire ouvert appeler un autre formulaire en lui passant le paramètre OpenArgs comme je te l'ai déjà indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "MonForm", acNormal, , , , ,Me.OpenArgs
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    Youhou,

    super ca fonctionne !

    merci beaucoup

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/02/2006, 09h36
  2. Convertir une valeur d'une zone de texte en date
    Par os_rasta dans le forum ASP
    Réponses: 17
    Dernier message: 27/02/2006, 15h56
  3. Réponses: 40
    Dernier message: 24/02/2006, 14h19
  4. Réponses: 1
    Dernier message: 02/12/2005, 05h18
  5. Réponses: 6
    Dernier message: 30/09/2005, 16h24

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