Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] Problème Textboxes

Soucis avec les Textboxes

    17 juillet 2020 à 11:33:05

    Salut à tous, 

    J'ai actuellement un problème car j'aimerais faire en sorte de pouvoir appliquer un evement before_update à toutes mes textbox et pouvoir l'inclure dans une fonction qui va elle vérifier que l'utilisateur soit un admin afin de modifier le fichier et non pas un user et si le cas échéant alors cela affiche une inputbox qui demande le mot de passe administrateur. 

    Fonction en question : 

    Private Sub TextBox_BeforeUpdate(Cancel As Integer)
    Dim rs As DAO.Recordset
    Dim db As Database
    Dim result As String
    Set db = CurrentDb
    requestSQL = "SELECT Motdepasse.[Status]FROM Motdepasse;"
    Set rs = db.OpenRecordset(requestSQL)
    result = rs.Fields("Status").Value
    If result = "admin" Then
    Cancel = False
    Else
    Call VerifForm
    Cancel = True
    End If
    End Sub

    Lorsque je rentre dans ces deux fonctions de vérification tout boucle à l'infini 

    Function VerifForm() As Boolean
    Dim Password As String
    Dim rs As DAO.Recordset
    Dim db As Database
    Dim result As String
    Set db = CurrentDb
    requestSQL = "SELECT Motdepasse.[PASSWORD]FROM Motdepasse;"
    Set rs = db.OpenRecordset(requestSQL)
    result = rs.Fields("PASSWORD").Value
    Password = InputBox("Veuillez saisir le mot de passe administrateur ou cliquez sur annuler", "V?rification du mot de passe", "*")
    VerifForm = (result = Password)
    Call passcheck
    End Function
    Function passcheck()
    If VerifForm() Then
    status = "admin"
    Call Updatedb(status)
    Else
    MsgBox ("Modifications interdites")
    End If
    End Function

     Merci d'avance de votre aide, :)

    Cordialement, 

    Sunshio 



    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2020 à 13:10:07

      Pourquoi vouloir tester le statut d'admin à chaque saisie ? pourquoi ne pas mettre le enabled des textbox à false si l'utilisateur n'est pas admin (et à true si il est admin)

      Pour l'histoire de la boucle infinie entre verifform et passcheck, c'est normal: dans verifform tu appelles passcheck qui appelle directement verifform qui va appeller passcheck etc etc.
      Appelle juste passcheck au lieu de verifform
      Si on admet que ça fonctionne, il reste la question du Cancel=True après le call verifform du textbox_beforeupdate: si à l'issue de la vérification, l'utilisateur a le statut d'admin, faut-il annuler la saisie qu'il avait commencer à rentrer ?
      Et passcheck devrait renvoyer True si admin et False sinon par exemple.

      Private Sub TextBox_BeforeUpdate(Cancel As Integer)
      If status = "admin" or passcheck() Then
          Cancel = False
      Else
         Cancel = True
      End If
      End Sub
      
      Function VerifForm() As Boolean
      Dim Password As String
      Dim rs As DAO.Recordset
      Dim db As Database
      Dim result As String
      Set db = CurrentDb
      requestSQL = "SELECT Motdepasse.[PASSWORD]FROM Motdepasse;"
      Set rs = db.OpenRecordset(requestSQL)
      result = rs.Fields("PASSWORD").Value
      Password = InputBox("Veuillez saisir le mot de passe administrateur ou cliquez sur annuler", "V?rification du mot de passe", "*")
      VerifForm = (result = Password)
      End Function
      
      Function passcheck() as Boolean
      passcheck=False
      If VerifForm() Then
        status = "admin"
        Call Updatedb(status)
        passcheck= True
      Else
        MsgBox ("Modifications interdites")
      End If
      End Function
      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2020 à 14:02:58

        Salut, 

        Merci encore de ta réponse j'ai un petit problème car du coup ca ne détecte aucune textbox comme faire pour tous les selectionner ? 

        Cordialement 

        Sunshio 

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2020 à 14:23:07

          la méthode d'événement beforeupdate est associée directement au nom de la texbox; c'est-à-dire si tu as une textbox appelé Arthur alors il faut une méthode Private Sub Arthur_BeforeUpdate(Cancel As Integer) qui contiendra le code écrit ci-dessus (à répéter pour toutes les textbox concernées)

          En me relisant, on pourrait s'affranchir du if  en écrivant directement Cancel= not( status="admin" or passcheck() ) (si on ne fait que traiter Cancel)
          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2020 à 14:26:58

            Ok super et sinon pour réintégrer la requete de recherche du status de l'utilisateur ca serait judicieux de la mettre où ? : 

            Dim rs As DAO.Recordset
            Dim db As Database
            Dim result As String
            Set db = CurrentDb
            requestSQL = "SELECT Motdepasse.[Status]FROM Motdepasse;"
            Set rs = db.OpenRecordset(requestSQL)
            result = rs.Fields("Status").Value



            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2020 à 14:58:39

              Tu peux le faire dans VerifForm aussi en modifiant la requête; après ça dépend quand ça semble le plus judicieux par rapport à ton application, mais d'après ce que j'ai compris, dans ta table il n'y a qu'un utilisateur et c'est l'admin (donc soit tu connais le seul mot de passe de la table et tu es admin sinon t'es un simple utilisateur).


              Exemple en l'intégrant dans VerifForm
              Function VerifForm() As Boolean
              Dim Password As String
              Dim rs As DAO.Recordset
              Dim db As Database
              Dim result As String
              Set db = CurrentDb
              requestSQL = "SELECT * FROM Motdepasse;"
              Set rs = db.OpenRecordset(requestSQL)
              result = rs.Fields("PASSWORD").Value
              status = rs.Fields("Status").Value
              Password = InputBox("Veuillez saisir le mot de passe administrateur ou cliquez sur annuler", "Vérification du mot de passe", "*")
              VerifForm = (result = Password)
              End Function
              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2020 à 15:09:01

                Ok et pour l'évènement TextBox_BeforeUpdate faut que je fasse appel à la fonction VerifForm dedans au niveau du else ?

                Aussi il n'y a rien qui s'affiche si on est en tant que USER or cela devrait afficher VerifForm 

                -
                Edité par Sunshio 17 juillet 2020 à 15:16:05

                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2020 à 15:56:00

                  non rien de plus que ce j'ai écrit.
                  Arf, je viens de voir que beforeupdate ne fonctionnait pas comme je le pensais (il ne se déclenche, chez moi, que quand je sors de la textbox).
                  Ce que tu veux faire, c'est d'afficher la demande de mot de passe quand la personne commence à modifier un textbox ? Dans ce cas-là, ça serait un autre événement à gérer (enter, keypress ou keydown) 

                  ou autre façon de faire, comme je l'avais plus ou moins suggéré: avoir un bouton de connexion/déconnexion qui demande le mot de passe et vérifies le status (donc appelle la fonction passcheck()) et modifie la propriété enabled des textbox selon le status (les passe à True si admin et à False sinon; par défaut à False je pense)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 juillet 2020 à 9:58:04

                    Merci Umfred encore une fois de plus tu m'as bien aidé ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [VBA] Problème Textboxes

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown