[VBA] formulaire de securité

Salut tou le monde !

Voila donc je suis actuellement en stage de premiere année bts info gestion developpeur d'application. Dans l'application Access 97 que je cré, je dois incoperais un formulaire de securité (Utilisateur, Mot de Passe) et je ne vois vraiment pas comment gerer sa par rapport a ma table securité contenant les infos user et mdp.

Donc g un bouton OK qui doit verifier par une requete si les données entré ds les champs utilisateur et mot de passe son correct pour ouvrir un autre formulaire ou dans le cas contraire envoyé un MsgBox.

Merci d'avance pour vos réponses !!!

28 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Authentification d'un utilisateur et du mot de passe dans Access 97 via une table 'sécurité' et tentative d'ouverture d'un autre formulaire ou d'afficher une MsgBox. Plusieurs réponses recommandent d'utiliser un enregistrement DAO et des variables comme NomUtilisateur et MotDePasse pour parcourir la table et comparer les valeurs saisies avec les enregistrements avant d'ouvrir le formulaire ciblé. Des questions techniques émergent, notamment sur l'utilisation d'événements comme BeforeUpdate et la gestion de plusieurs utilisateurs, ainsi que sur des messages d'erreur tels que l'impossibilité de localiser un formulaire. En parallèle, des échanges évoquent des difficultés liées au type des variables, au déplacement du curseur sur le recordset et à la synchronisation entre les champs du formulaire et ceux de la table.

Bobot (l’IA à votre service)
  1. ;-)

    Dans ton bouton OK, tu ouvres, via VBA, ta table sécurité, et tu vérifies les champs avec une boucle, que tu compare à tes zones de texte...

    ;-)
    1. Ok mais c justement sa que j'aimerais connaitre,

      je fais ma connection a la base de donnée (.Open Current Project.Connection)

      mais en suite je vois pas comment ouvrir les champs de la table et comment les comparés a ceux du formulaire. et comment faire pour qu'il compare les mots de passe par rapport au nom de l'utilisateur entré !

      dsl si je suis chiant mais je m'y connais pas en VBA !!!

      merci pour vos reponses !
    2. @Théo;-)

      On va dire que, dans ton formulaire, tu as les objets suivants :

      1 table qui s'appelle "Sécurité", avec les champs NomUtil qui contient le nom de l'utilisateur et Pswd qui contient le password...

      Dans ton formulaire :
      1 zone de texte qui contient le nom de l'utilisateur nommée : Txt_NomUtilisateur
      1 zone de texte qui contient le mot de passe nommée : Txt_Password
      1 bouton OK : Btn_OK

      Tu mets ce code dans l'événement _Click de Btn_OK :

      Dim LaTable, Cpt, NomUtilisateur, MotDePasse
      Set LaTable = CurrentDb.OpenRecordset("Sécurité")
      LaTable.MoveLast
      LaTable.MoveFirst
      For Cpt = 1 To LaTable.RecordCount
      NomUtilisateur = LaTable.NomUtil
      MotDePasse = LaTable.Pswd
      If Me.Txt_NomUtilisateur = NomUtilisateur Then
      If Me.Txt_Password = MotDePasse Then
      LaTable.Close
      DoCmd.OpenForm (LeFormulaire)
      Unload Me
      End If
      End If
      Next
      LaTable.Close
      -------------------------------------

      Ca ouvre la table sécurité, le MoveLast/MoveFirst sont là pour alimenter automatiquement le Recordcount de la table et pour la boucle...
      Ensuite, cela compare le contenu des champs de la table avec le contenu des zones de texte...
      Si cela correspond, on ferme la table ouverte, on ouvre le bon formulaire et ça ferme ton formulaire de sécurité...

      ;-)
    3. @WhiteFangQuand tu dis "LaTable" sa correspond a la table securite ?
      et donc quand tu dis "Sécurité" sa correspond au formulaire d'identification ?
      Sinon le "Cpt" et le "Me" sa correspoond a koi ?

      En tout cas merci de ton aide je v essayer sa tout de suite.
    4. @Théo;-)

      "LaTable" est une variable "objet" qui pointe sur la vraie table physique...

      "Sécurité" c'est le vrai nom de ta table sécurité....

      "Cpt" c'est une variable qui sert pour le compteur (elle va prendre successivement les valeurs 1,2,3... jusqu'au total des enregistrements de la table....

      "Me", c'est l'objet en cours/actif, en l'occurence, ton formulaire sécurité...

      ;-)
    5. @WhiteFangDonc j'ai mi ça :

      Dim LaTable As Database
      Dim Cpt As Integer
      Dim NomUtilisateur As String
      Dim MotDePasse As String

      Set LaTable = CurrentDb.OpenRecordset("securite")
      LaTable.MoveLast
      LaTable.MoveFirst
      For Cpt = 1 To LaTable.RecordCount
      NomUtilisateur = LaTable.NomUtil
      MotDePasse = LaTable.Pswd
      If Me.Txt_NomUtilisateur = NomUtilisateur Then
      If Me.Txt_Password = MotDePasse Then
      LaTable.Close
      DoCmd.OpenForm ("Gestio du Régime Indemnitaire")
      Unload Me
      End If
      End If
      Next
      LaTable.Close

      Et il me met un message d'erreur sur le .MoveLast en disant:
      Membre de méthode ou de données introuvable
  2. ok sa marche a peu prés, mais maintenant i me met une message microsoft visual basic
    erreur d'exécution '361'
    Impossible de charger ou de décharger cet objet

    quand je clic sur deboguage il me met l'erreur sur le "Unload Me"
    1. c bon g reussi a corriger l'erreur en retirant
      "Unload Me" et "LaTable.Close"

      En tout cas merci beaucoup pour ton aide tu as assuré, meme si c pas simple de m'expliquer un truc chui du genre a rien comprendre enfin tu l'as remarqué ^^

      Merci Man !
      1. oui qd g supprime le Unload Me, il a mi la mm erreur sur LaTable.close donc g sup aussi et sa fonctionne
        1. une dernière question steup.

          dans la declaration des variables:
          Dim LaTable, Cpt, NomUtilisateur, MotDePasse

          Pourquoi on met tou a la suite et pourquoi on declare pas de type ?
          Et pourquoi quand g tout declarer separerment sa marchait pas ?
          1. ;-)

            Je met tout à la suite et je ne déclare rien quand il s'agit de petit bidules, question appli VBA.... Quand on dit rien, le type par défaut est VARIANT, qui prend un peu plus de mémoire, mais on s'en fous car ce ne sont que de petits bidules en VBA, et comme les ressources sont libérées au "End Sub", cela permet de donner une aide à ceux qui sont un peu dans la panade sans avoir à leur donner de cours magistral sur la programmation et l'état de l'art....

            C'est pour aider... Ensuite, le petit gars/fille qui vient là pour crier "à l'aide", il a tout le temps, avec le code qu'on lui donne, pour ensuite faire un joli ptit code bien propre et économique en ressources, bref, un bon petit développeur... Touche F1 à fond !! ;-)))

            Les bons, ils n'ont pas besoin de notre aide... ;-))))))))))))

            Et quand tu dis rien, l'avantage du VARIANT, c'est de s'adapter à tous les types de données.... Pas de prise de tête pour un débutant....

            ;-)
            1. Ok merci !

              L'element LaTable c une table fictive qui va recevoir les elements de la table securite ?

              Et sinon sur le formulaire suivant, j'ai mi un champ qui affiche le nom de l'utilisateur connecté, pour le moment pas de prob sa fonctionne bien. Mais quand g ajouté la ligne qui ferme le formulaire securité a la connexion d'un utilisateur, le champ utilisateur du second formulaire ne reçoit plus les données utilisateur du premier formulaire.

              Tu as pas une idée ?
              1. ;-)

                LaTable : Oui, c'est un variable de type OBJET, qui fait référence à la vraie table, avec toute la structure (champs...)

                Pour le nom de l'utilisateur : Utilise une variable "Public", dans un module, cela la rendra accessible par TOUT ton projet VBA...

                Ex : Public NomUtilisateur -As String si tu veux ;-)-

                Ensuite, dans ton fomulaire : Txt_Utilisateur=NomUtilisateur

                ;-)
                1. Donc g créer le module avec pour code:

                  Option Compare Database
                  Public NomUtilisateur As String

                  Private Sub txt_Utilisateur_BeforeUpdate(Cancel As Integer)
                  txt_Utilisateur = NomUtilisateur
                  End Sub

                  Mais sa marche pas

                  Et sinon g un autre probleme, c quand je ve mettre plusieurs utilisateur dans ma table securite, le cpt du formulaire securite ne doit pas voir les autre ligne car il me ferme la page au lieu d'ouvrir le second formulaire
                  1. il a mi sa automatiquement quand g voulu créer mon code sur le champ txtUtilisateur du deuxième formulaire.

                    sinon c pas grave je v laisser le premier formulaire ouvert mais je ferais en sorte que le second se mette devant pour pas qu'on y accede ^^
                    enfin bref camouflage !
                    1. ;-)

                      Tu aurais dû utiliser une étiquette, pas une zone de texte...

                      ;-)
                      1. Tu utilises la propriété Caption

                        Ex : Me.Etq_UserName.Caption =xxx

                        Ou direct depuis l'autre formulaire : Forms(xxx).Etq_UserName.Caption=xxx
                        1. cool sa marche merci :)

                          sinon tu c pas cmmt je peux faire pour gerer plusieurs utilisateur ?
                          parce que si je met dropp utilisateur dans la table securite, sa ne marche pas.
                          1. ;-)

                            Week-end !! ;-)))))))))

                            La suite Lundi.... ;-)
                        2. ;-)

                          Un dropp utilisateur ? Wat is dat ?

                          Qu'entends tu par gérer plusieur utilisateurs ?

                          ;-)
                          1. sinon tu c pas cmmt je peux faire pour gerer plusieurs utilisateur ?
                            parce que si je met dropp utilisateur dans la table securite, sa ne marche pas.

                            lol dsl fatigue de fin de semaine je voulais dire:
                            parce que si je met ... euh en faite je c plus ce que je voulais dire lol

                            Donc si je me souvient le probleme etait avec le Cpt, quand je veut mettre plusieur utilisateur dans ma table securite. et que par exemple je ve me connecter avec le second utilisateur il ne me lance pas le second formulaire et parfois il me met une erreur sur le:
                            For Cpt= 1 To vLaTable.RecordCount

                            voila sa devrait etre plus clair.

                            Sinon qd g plus d'un utilisateur dans ma table et que je v tester mon msgbox "Nom d'utilisateur ou mot de passe incorrect"
                            il m'affiche le message autant de fois qu'il y a d'utilisateur.

                            merci d'avance pour ton aide.
                        3. ;-)

                          Ta base, c'est du confidentiel ? Passke c'est vrai, avec le temps, on arrive à se mélanger les pinceaux, et tu pourrais me l'envoyer que je vois tout ça avec mes yeux à moi... Mais bon.. Faut pas qu'elle soit trop grosse non plus ;-)

                          ;-)
                          • 1
                          • 2