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 :

Ouverture de formulaire différent en fonction du login


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut Ouverture de formulaire différent en fonction du login
    Bonjour,

    Je crée en ce moment une base de donnée, j'ai donc un formulaire Login et je souhaite pouvoir lui faire ouvrir une page administrateur ou utilisateur en fonction du login.
    Mon problême provient lors de la création du bouton Entrer, en effet je ne sais quel option choisir, il s'agit bien ici d'une opération sur formulaire, car je veux ouvrir un formulaire mais en fonction de mon login (lorsque que je choisis opération sur formulaire, il ne me laisse le choix d'ouvrir qu'un formulaire.)

    Voici mon code vba:

    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
    Private Sub Identifiant_AfterUpdate()
     
    If Identifiant.Text = "" Then
            MsgBox ("Aucun utilisateur sélectionné")
    End If
    End Sub
     
    Private Sub Bouton_Entrer_Click()
    On Error GoTo Err_Bouton_Entrer_Click
     
    Dim stLinkCriteria As String
    Dim FormA As String
    Dim FormU As String
    Dim X As String
    Dim L As String
    FormA = "PageAdministrateur"
    FormU = "PageUtilisateur"
    X = MotDePasse
    L = Identifiant
     
    If L = "Admin" And X = MdpUtilisateur Then
         DoCmd.OpenForm FormA
    End If
     
    If Left(L, 1) = "U" And L = NomUtilisateur And X = MdpUtilisateur Then
        DoCmd.OpenForm FormU
    End If
     
        Screen.PreviousControl.SetFocus
        DoCmd.FindNext
     
    Exit_Bouton_Entrer_Click:
        Exit Sub
     
    Err_Bouton_Entrer_Click:
        MsgBox Err.Description
        Resume Exit_Bouton_Entrer_Click
     
    'empêche la saisie au clavier dans ma liste déroulante    
    End Sub
    Private Sub Identifiant_KeyDown(KeyCode As Integer, Shift As Integer)
     
    KeyCode = 0
     
    End Sub
    Je ne pense pas que mon problême provienne du code mais des options que me laisse ACCESS lors de la création de mon bouton, je ne sais laquelle choisir, quelqu'un pourrait-il m'aider?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 115
    Points : 1 616
    Points
    1 616
    Par défaut
    Récupère le login de l'utilisateur au démarrage de l'appli. Puis suivant ses droits défnis dans une table, ouvre lui le formulaire adequat.
    C'est ce que je fais dans toutes mes applis avec bonheur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Je m'excuse mais je ne vois pas bien ce que tu veux dire, en fait lorsque je lance ma base de donner, mon formulaire login se lance, et ce que je voudrais faire c'est que quand l'utilisateur entre comme login "admin" il m'ouvre le formulaire destiné à l'administrateur et lorsqu'il entre un login de type "utilisateur" il m'ouvre le formulaire Utilisateur.

    le problême provient de mon bouton "Entrer", lorsque je crée un Bouton de Commande dans Access il me demande quel action je veux affecté lors du click et je ne sais que mettre sachant que j'ai des conditions (cf ci dessus), je ne veux pas qu'il ouvre un seul formulaire comme il me le propose.

    Pouvez vous mé détailler votre conseil?

    Merci pour votre aide.

  4. #4
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 115
    Points : 1 616
    Points
    1 616
    Par défaut
    dans un module de démarrage qui te sert à initialiser tes variables, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, Nsize As Long) As Long
    Private Declare Function apiGetSys Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
    un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function GetUser() As String
     
        Dim Buffer$, guLen&, a%
        Buffer$ = Space$(256)
        guLen& = Len(Buffer$)
        a% = GetUserName(Buffer$, guLen&)
        GetUser = Left$(Buffer$, guLen& - 1)
     
    End Function
    je te mets le code que j'utilise :
    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
    Sub MonCode
        '-------------  Voir les droits de l'utilisateur
        Set rst = db.OpenRecordset("SELECT * FROM Users " _
        & "WHERE UserLogin = " & Chr(34) & s_User & Chr(34) & " ")
        With rst
            If .BOF Then
                MsgBox "Vous n'êtes pas autorisé" & vbCrLf & "à utiliser cette application !" _
                & vbCrLf + vbCrLf & "      Au revoir.", vbCritical, "NON AUTORISE"
                .Close
                DoCmd.Quit
                Exit Function
            End If
            If .Fields("UserComplet") = True Then
                Complet = True: s_Droit = "complet"
            Else
                Complet = False: s_Droit = "Restreint"
            End If
            .Close
        End With
     
    End Sub
    J'utilise un string "s_Droit", mais tu peux utiliser un integer i_Droit (1 ou 0) par exemple.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Je suis désolé Stigma, je suis peruadé que ta réponse est pertinente mais étant assez novice en VBA, je n'en comprend qu'une partie.
    Le fait de déclarer les variables dans un module est une chose que j'avais omise je te remercie de m'y faire penser

    Par contre je ne comprend pas la totalité de ton code, tu n'as pas déclarer le " s_droit" et lorsque je veux faire un f1 pour savoir à quoi correspond cette fonction il ne la trouve pas dans les aides, j'en conclue que c'est une fonction que je dois déclarer. De même pour le " Complet = true "

    En fait j'ai une table Utilisateur avec 2 champs (et une clé primaire qui ne sert pas à grand chose à vrai dire) NomUtilisateur et MdpUtilisateur. Dans mon Formulaire j'ai un menu déroulant avec les utilisateurs (et un utilisateur dénommé Admin) que j'ai appelé Identifiant, et un espace pour entrer son mot de passe que j'ai appelé MotDePasse.
    Dans les propriétés de ma zone de liste déroulante le contenu est le suivant "SELECT Utilisateur.CodeUtilisateur, Utilisateur.NomUtilisateur FROM Utilisateur ORDER BY [NomUtilisateur]; " j'ai donc déjà effectué les requêtes à l'aide d'Access.
    Cependant depuis que j'ai décidé de mettre une zone de liste déroulante,lorsque je click sur le bouton "entrer" mes pages ne s'ouvrent plus (j'ai l'impression qu'étant donner que je n'entre plus les login manuellement il ne sait pas reconnaître les conditions que je lui demande tel que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If L = "Admin" And X = MdpUtilisateur Then
        DoCmd.OpenForm FormA
    End If
     
    If Left(L, 1) = "U" And L = NomUtilisateur And X = MdpUtilisateur Then
        MsgBox ("utilisateur")
        DoCmd.OpenForm FormU
    End If
    Je veux bien utiliser ton code mais il est vrai que je n'en comprend pas les ficelles

    Je te remercie pour ton aide en tout cas.

  6. #6
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 115
    Points : 1 616
    Points
    1 616
    Par défaut
    bien sûr, il faut tout déclarer (bien que ce ne soit pas obligatoire).
    par exemple.
    Je te conseille de bosser en VBA. Ce n'est pas tellement compliqué et proche d'un basic de base, comme son nom l'indique. De plus avec VBA, tu peux faire une appli très souple.

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 57
    Points : 70
    Points
    70
    Par défaut
    Puis-je me permettre un petit grain de sel ?

    benjamin002, si la colonne liée de ta liste déroulante est la 1e (par défaut), la valeur qui lui est affectée est ton champ CodeUtilisateur et pas NomUtilisateur, même si c'est le nom qui apparaît lors du choix.
    (L'assistant liste déroulante propose par défaut de mettre la colonne clé cachée en 1er)
    Ton test devrait donc être fait sur la clé.

    LilyX

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Bonjour LilyX,

    En fait lorque je crée ma liste déroulante, je choisis l'option "Je veux que la liste déroulante recherche les valeurs dans une table ou requête", je choisis donc ma table Utilisateur, et je selectionne uniquement le champs NomUtilisateur, donc il ne prend pas en compte mon CodeUtilisiteur n'est ce pas?

    Dans le cas ou il faudrait que je fasse ma recherche par rapport au CodeUtilisateur, dois-je le faire de cette façon?

    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
    Private Sub Commande9_Click()
     
    On Error GoTo Err_BoutonEntrer_Click
    Dim FormA As String
    Dim FormU As String
    Dim X As String
    Dim L As String
    FormA = "PageAdministrateur"
    FormU = "PageUtilisateur"
    X = MotDePasse
    L = Identifiant
     
    If L = "Admin" And CodeUtilisateur =< 1 And X = MdpUtilisateur Then
         DoCmd.OpenForm FormA
    End If
     
    If L = "U*" And CodeUtilisateur > 1 And X = MdpUtilisateur Then
        DoCmd.OpenForm FormU
    End If
     
        Screen.PreviousControl.SetFocus
        DoCmd.FindNext
     
    Exit_BoutonEntrer_Click:
        Exit Sub
     
    Err_BoutonEntrer_Click:
        MsgBox Err.Description
        Resume Exit_BoutonEntrer_Click
    End Sub
    J'ai toujours le problême du message qui m'indique que "vous n'avez pas spécifié de critères de recherche avec une action TrouverEnregistrement"
    Merci pour ton aide.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Si je peux me permettre je reformule mon problême.

    En fait je pense que mon problême provient de mon bouton de commande, je ne sais quel option choisir étant donner que je ne veux pas qu'il me dirige vers un formulaire mais vers un formulaire différent selon des conditions (un formulaire administrateur et un formulaire utilisateur),
    quelqu'un aurait-il une idée pour m'aider?

    Merci.

  10. #10
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 57
    Points : 70
    Points
    70
    Par défaut
    Essayons de séparer les problèmes...

    Dans les propriétés de ma zone de liste déroulante le contenu est le suivant "SELECT Utilisateur.CodeUtilisateur, Utilisateur.NomUtilisateur FROM Utilisateur ORDER BY [NomUtilisateur]; "
    Ceci signifie qu'il y a bien le CodeUtilisateur comme 1e colonne de ta liste déroulante (l'assistant propose toujours la clé primaire par défaut mais cachée = la colonne fait 0cm).
    depuis que j'ai décidé de mettre une zone de liste déroulante
    Si je comprends bien, c'est la liste déroulante qui fait que ça ne marche plus.

    Apparemment, ta liste s'appelle Identifiant ?
    Donc si la clé primaire de l'utilisateur Admin est, par exemple, 1
    et que tu choisis Admin dans la liste, il faudra tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Identifiant = 1 Then
    etc.

    J'ai toujours le problême du message qui m'indique que "vous n'avez pas spécifié de critères de recherche avec une action TrouverEnregistrement"
    Quant à ce message d'erreur, il semble provenir du DoCmd.FindNext à la fin du code dont je ne vois pas à quoi il doit servir.

    LilyX

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Tu avais raison il fallait bien mettre Identifiant = 1
    Je l'avais tester tout à l'heure mais ça ne fonctionnait pas. En fait cela fonctionne lorsque je met uniquement comme condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Identifiant = 1 Then
         DoCmd.OpenForm "PageAdministrateur"
    End If
    Mais dès que je rajoute la condition du mot de passe il ne se passe rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Identifiant = 1 And MotDePasse = MdpUtilisateur Then
         DoCmd.OpenForm "PageAdministrateur"
    End If
    J'ai bien vérifié les orthographes, ils sont pourtant correct. Ma zone de texte ou j'entre manuellement mon mot de passe s'appelle bien "MotDePasse" et dans ma base de donné il s'appelle MdpUtilisateur.
    Je me demande si il ne faut pas lui demander de chercher spécifiquement le mot de passe de l'utilisateur Admin (mais je ne sais comment):
    MotDePasse (doit être) = MdpUtilisateur(de l'admin)
    Est ce qu'il sait automatiquement ou il doit chercher?

    Merci pour ton aide en tout cas c'est gentil

  12. #12
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 57
    Points : 70
    Points
    70
    Par défaut
    MdpUtilisateur est un champ de ta table.
    Il n'est pas présent dans le formulaire.
    Il faut donc que tu expliques à Access comment aller le chercher.
    N'oublie jamais : Access ne devine rien !

    Si tu n'es pas très à l'aise avec le code VBA, tu peux toujours essayer d'utiliser la fonction RechDom (DLookup en anglais) qui te permettra de récupérer les infos de ta table avec un critère. Elle est bien documentée dans l'aide Access et il y a des exemples.

    LilyX

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    Lorsque je regarde l'aide il me dit que:
    "La fonction DLookup vous permet d'afficher la valeur d'un champ qui n'appartient pas à la source d'enregistrements sur laquelle le formulaire ou l'état est fondé"
    Or mon formulaire est lié à ma table Utilisateur, sinon j'aurais du faire pareil pour le nom d'utilisateur. Pourquoi il ne reconnait pas mon MdpUtilisateur alors que celui-ci est lié au formulaire?

    Lorsque je met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If MotDePasse = MdpUtilisateur Then
         DoCmd.OpenForm "PageAdministrateur"
    End If
    Il test tout les mot de passe de la base donnée normalement, par contre je ne vois pas comment il peut faire la liaison avec le login, par exemple si j'ai dans ma table utilisateur:
    Admin pw: 111111
    Didier pw: 222222

    si je lui met uniquement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Identifiant = 1 Then
    If MotDePasse = MdpUtilisateur Then
         DoCmd.OpenForm "PageAdministrateur"
    End If
    End If
    et que lorsque je suis dans le formulaire login je met admettons
    Login: Admin
    pw: 222222

    il s'ouvrira quand même n'est ce pas?

    Je me demande donc comment lui demander:

    If Identifiant = 1 Then
    If MotDePasse = MdpUtilisateur(de l'admin) Then
    DoCmd.OpenForm "PageAdministrateur"
    End If

  14. #14
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 57
    Points : 70
    Points
    70
    Par défaut
    Regarde la propriété source du formulaire : y a-t-il Utilisateur ou rien ?
    si c'est Utilisateur alors ton formulaire est effectivement basé sur la table.
    et celle de la liste déroulante ?
    si c'est CodeUtilisateur alors c'est dangereux car quand tu choisis quelque chose, tu changes les données de la table.
    S'il n'y a rien pour la liste (contrôle indépendant), ce n'est pas le fait de choisir quelque chose qui va te positionner automatiquement sur le bon enregistrement de la table, sauf si tu le programmes.

    La notion de source est très importante.

    En résumé :
    Soit tu as basé le formulaire sur la table et tu crées avec l'assistant une liste déroulante qui se positionne automatiquement sur l'enregistrement choisi, ici l'utilisateur. Dans ce cas, tu pourras comparer le mot de passe saisi (contrôle indépendant) avec le mot de passe du champ pwd (caché). Bon, sécurité ultra-minimale.
    Soit ton formulaire est indépendant (sans source) et c'est le code de ton bouton qui va chercher le mot de passe dans la table, par exemple avec DLookup. Sécurité faible aussi mais c'est un petit peu mieux.

    LilyX

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Points : 56
    Points
    56
    Par défaut
    J'ai finalement réussit à faire fonctionner mon formulaire login, j'ai changer quelque truc en ayant regarder des forums et ça fonctionne.

    Je te remercie pour ton aide.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/05/2014, 09h10
  2. Réponses: 4
    Dernier message: 12/12/2008, 07h28
  3. Réponses: 2
    Dernier message: 30/10/2008, 18h30
  4. Réponses: 5
    Dernier message: 08/05/2008, 21h44

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