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 :

Appliquer un filtre sur un formulaire Login/mdp


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut Appliquer un filtre sur un formulaire Login/mdp
    Bonjour,

    un autre post ( et oui c'est loin d'etre mon premier problème) car j'suis encore perdu !!!

    Je souhaite pour mon application utiliser un formulaire de connexion

    j'ai crée une table "Tab_Users" et un formulaire " Connexion ". Table Tab_Users (TRIGRAMME, NOM, PRENOM, PASSWD) tous les champs sont de type texte. J'utilise donc ce code :

    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
     
     
    L'évènement on_click du bouton Connexion : 
    ------------------------------------------------------------------------------- 
    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_USERS WHERE TRIGRAMME = '" & me.txt_user & "' AND PASSWD ='"& Me.txt_pass & "';" 
     
    Set rs = CurrentDb.OpenRecordset(sql) 
     
    If Not rs.EOF Then 
     
    DoCmd.OpenForm "menu principal 1", acNormal, , , , acWindowNormal 
     
    DoCmd.close acForm, "F_CONNEXION" 
     
    User_id = rs("TRIGRAMME").value 
     
    Else 
     
    MsgBox "(Identifiant, 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és", vbCritical 
    DoCmd.Quit 
    End If 
     
    End Sub
    Ce formulaire de connexion servira à sécuriser un minimum l'acces à l'application. Je voudrais surtout pouvoir filtrer l'affichage d'un sous formulaire en mode feuille de données en fonction du NOM de la personne qui se connecte. Je m'explique, dans ma table principale il y a un champ NOM. Chaque enregistrement se voit attribué une personne. Dans le sous form il y a une requête sélect en source controle qui affiche certain champs. Ce sous form est en mode feuille de données.

    Je voudrais donc que sur l'ensemble des enregistrements présent dans la table principale, seul les enregistrements correspondant à la pers qui se connecte soit affiché.

    Je n'ai pas de problème en général avec les filtres, mais la je suis bloqué pour intégrer ca dans le code. Je manque vraiment de connaissance en VBA, les messages d'erreur et moi on a commencé à sympathisé... et ils ont vraiment l'air de vouloir devenir amis avec moi...

    Si quelqu'un à assez de motivation pour me donner un piste je lui en serait très reconnaissant !!!

    merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 019
    Points : 24 551
    Points
    24 551
    Par défaut
    Bonjour,

    Le filter (propriété du formulaire) a exactement la même syntaxe qu'un where sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.filter = "Trigrame='" & vuser & "'"
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.openform "frmConsultation",,,"Trigrame='" & vuser & "'"
    Note que tu peux également utiliser la clause where de la commande docmd.openform mais sans possibilité "aisée" de modifier le filtre en cours d'utilisation du form.

    Cordialement,

    ps : c'est bien que tu te sois fait des amis en vba, même si ce sont des messages d'erreurs.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Merci pour cette solution !!

    Vu que le formulaire connexion ne se connecte pas directement au Form qui permet de sélectionner les dossiers (composé du sous form qui doit etre filtré) mais se connecte dabord sur un menu principal. je me demande si cela peut marcher comme ca. Si je met le filtre dans la source control du sous form

    je me permet tant que j'y suis de te montrer mon code. J'ai un message d'erreur " l'expression sur clic entrée comme paramètre de la propriété de type évènement est à l'origine d'une erreur. Instruction incorrecte à l'extérieur d'une procédure. .

    Dan ce code j'ai enlevé la partie groupe car j'en ai pas du tt besoin et j'ai peur que ca soit a cause de ca.

    code d'origine trouvé dans le FAQ : ICI
    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_users WHERE TRIGRAMME = \'" & Me.txt_user & "\' AND PASSWORD =\'"& Me.txt_pass & "\';"
    Set rs = CurrentDb.OpenRecordset(sql)
    If Not rs.EOF Then
      DoCmd.OpenForm "Menu_utilisateur", acNormal, , , , acWindowNormal
      DoCmd.close acForm, "F_CONNEXION"
      User_id = rs("TRIGRAMME").value
      User_groupe = rs("GROUPE").value
    Else
      MsgBox "(Identifiant, 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és", vbCritical
    DoCmd.Quit
    End If
    End Sub
    et celui que j'essaye de faire fonctionner

    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
    Private Sub Commande0_Click()
     
    Me.Requery
     
    Dim sql, User_id As String
    Dim rs As DAO.Recordset
     
    Static i As Byte
     
    sql = "SELECT * FROM T_users WHERE TRIGRAMME =  \'" & Me.txt_user & "\' AND PASSWORD =\'" & Me.txt_pass & "\';"
     
    Set rs = CurrentDb.OpenRecordset(sql)
     
    If Not rs.EOF Then
     
    DoCmd.OpenForm "Menu_utilisateur", acNormal, , , , acWindowNormal
     
    DoCmd.Close acForm, "F_CONNEXION"
     
    User_id = rs("TRIGRAMME").Value
     
     
    Else
     
    MsgBox "(Identifiant, 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és", vbCritical
    DoCmd.Quit
    donc si tu arrives à savoir pourquoi ca m'aiderai pas mal merci !!!



    [EDIT] C'est bon en faite.. il fallait juste du temps pour trouver ce qui n'allait pas... un end sub qui manquait (bouhhhh)et j'ai enlevé les slash dans la requet sql.

    Par contre je me pose toujours des question concernant le filtre. j'ai une relation T_users (TRIGRAMME ; NOM ; PRENOM ; PASSWORD)1------∞T_dossiers (#controleur ; id dossier..etc)

    Ma table T_dossiers contient les enregistrements (les dossiers) et un controleur est assigné à chaque dossier. Au niveau de mon sous formulaire qui permet au controleur de sélectionner un dossier, j'ai en source controle une requete qui reprend certain champs de T_dossier et également le champ controleur.
    Si je met comme filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.filter = "TRIGRAMME='" & vuser & "'"
    dans la requete sql. je ne suis pas sur de pouvoir filter le sous form. bref je suis pas très doué comme tu le vois...

    Je me demandais également a quoi correspondait vuser...

    si tu pouvais m'éclairer sur ces points... merci !
    [/EDIT]

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 019
    Points : 24 551
    Points
    24 551
    Par défaut
    Bonjour,

    Si tu filtre le form pour un controleur automatiquement tu ne verras que ses dossiers dans le sous form. Encore faut-il que les propriétés champs père et champs fils soient réglés avec le(s) bon(s) champ(s)/controle(s).

    Cordialement,

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Bonjour

    Je te remercie... Alalala encore du mal avec les propriétés champ père champs fils. Dans tous les cas ca marche nickel

    J'ai juste un dernier petit problème. Le filtre reste actif même lorsque je retourne sur l'appli après l'avoir quitter. Je n'arrive pas à trouver le moyen de le désactiver via VBA sur l'évènement click d'un bouton.

    est ce que Me.undo correspond à peu près à ce que je cherche (si oui je l'applique mala lors...^^)

    merci de ton aide en tt cas ca fait vraiment plaisir !!

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 019
    Points : 24 551
    Points
    24 551
    Par défaut
    bonjour,

    La propriété qui active le filtre doit être mis à false et/ou celui qui contient le filtre à blanc. Toutes ces choses basiques sont dans l'aide (F1).

    Cordialement,

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Points : 492
    Points
    492
    Par défaut
    Bonjour ,

    Bon je pense plutôt à faire un treeView la non ?

    (Bon dans les deux cas [treeView ou byLogin], il te faudra un module (on l'apellera : Nom_Machine)

    Dans ce module il sera fait de prendre le nom de la machine (logique hein ? ^^)
    [Code que j'avais pris il y à un long moment ici même dans les tuto/cours ...]

    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
     
    Option Compare Database
    Option Explicit
     
    Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
    Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Private Declare Function SetComputerName Lib "kernel32" Alias "SetComputerNameA" (ByVal lpComputerName As String) As Long
    Public Sub ChangerNomMachine(NouveauNom As String)
        If SetComputerName(NouveauNom) = 0 Then
        MsgBox "Impossible de changer le nom de cet ordinateur", vbCritical, "Erreur"
        Else
        MsgBox "Modifications appliquées", vbInformation, "Information"
        End If
    End Sub
    Public Function NomMachine() As String
    On Error GoTo err
        Dim Buffer As Long
        Dim Reponse As String
        'Creer un buffer
        Buffer = MAX_COMPUTERNAME_LENGTH + 1
        Reponse = String(Buffer, " ")
        'Recuperer le nom machine
        GetComputerName Reponse, Buffer
        'Coupe la chaine
        Reponse = Left(Reponse, Buffer)
        'Renvoit le resultat
        NomMachine = Reponse
    err:
    End Function

    Ensuite Que faire ?
    Sur ton Formulaire Principal : pour le Chargement

    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
     
    Private Sub Form_Load()
     
    DoCmd.Maximize
     
    Dim oNodex As Node
    Dim nImage As Integer
    Dim nSelectedImage As Integer
    Dim i As Integer
    Dim sTableNames As String
    Dim sNodeTable As String
    Dim mdb As Database
    Dim mRS As Recordset
     
     
        sNodeTable = "REQ_Définition_Treeview"
        Set mdb = CurrentDb()
     
     
        Menu_principal_treeview.Nodes.Clear '--- vide le treeview ---
        Set mRS = mdb.OpenRecordset(sNodeTable)
        If mRS.RecordCount > 0 Then '--- test si la table n'est pas vide ---
            mRS.MoveFirst
            Do While mRS.EOF = False
                nImage = mRS.Fields("image")
                nSelectedImage = mRS.Fields("selectedimage")
     
                '--- Permet de charger le tableau qui va contenir pour chaque clé, le nom des sous formulaires ---
                SFRM(Val(mRS.Fields("key"))) = mRS.Fields("SFRM")
     
                If Trim(mRS.Fields("parent")) = "0_" Then '--- Noeud père ---
                    Set oNodex = Menu_principal_treeview.Nodes.Add(, "1", Trim(mRS.Fields("key")), _
                      Trim(mRS.Fields("text")), nImage, nSelectedImage)
                                        '--- Permet de déployer par défaut toutes les branches ---
                      If mRS.Fields("Deploy") = True Then
                          oNodex.EnsureVisible
                      End If
                Else '--- Tous les noeuds fils doivent avoir la clé du père ---
                    Set oNodex = Menu_principal_treeview.Nodes.Add(Trim(mRS.Fields("parent")), tvwChild, _
                       Trim(mRS.Fields("key")), Trim(mRS.Fields("text")), nImage, nSelectedImage)
                                     '--- Permet de déployer par défaut toutes les branches ---
                      If mRS.Fields("Deploy") = True Then
                        oNodex.EnsureVisible
                      End If
                End If
                mRS.MoveNext
            Loop
        End If
        mRS.Close
        mdb.Close
     
        Set mRS = Nothing
        Set mdb = Nothing
     
    End Sub
    Pour plus d'information sur la totalité des codes et des procédures a suivre , ce référée au cours/tuto sur ce sujet !

    Après peu être que ton idée n'est pas une treeView.(ici la connection se fera par le NOM du pc et non pas par mdp. pour faire par MDP il te faudra faire :

    Dans ce cas la il te faudra mettre ce bout de code dans ton module : Gestion_Acces

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    DoCmd.OpenForm "F_principal", acNormal
    Forms![F_Principal]![SF_bandeau].Form.RecordSource = "SELECT T_USER.NOM, T_USER.PRENOM, T_USER.NIVEAU_ACCES, T_USER.PASSWD, T_USER.TRIGRAMME FROM T_USER WHERE (((T_USER.TRIGRAMME)='Operateur'));"
    Forms![F_Principal]![SF_bandeau].Requery
    CommandBars("M_MENU").Enabled = False
    Bon le code est parlant ... (ici moi je travail avec unBandeau au bas de mes fenêtre pour voir le niveau d'acces et qui est connectée etc ... (d'ou le SF_Bandeau du code)


    Mais bon la il est dur de te donnée la totalité de la source et de tout t'expliquée , prend plutôt sa comme une orientation dans tes recherches!

    Cordialement à toi ,

    Pour tes autres demandes ... vois avec loufab se sera plus simple

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/12/2012, 15h02
  2. Réponses: 7
    Dernier message: 07/06/2007, 10h22
  3. Réponses: 5
    Dernier message: 11/04/2007, 09h16
  4. [MySQL] Problème sur des comptes (login/mdp)
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 15h41
  5. Problème de filtre sur un formulaire
    Par bernardmichel dans le forum IHM
    Réponses: 6
    Dernier message: 12/12/2005, 15h36

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