Erreur code vba

Résolu
Bonjour,
j ai ecrit un code vba mais il me donne une erreur lors de l execution est ce que vous pouvvez maider a la corriger???
merci d avance
Configuration: Windows XP
Internet Explorer 7.0

43 réponses

Résumé de la discussion

Un code VBA génère une erreur d'exécution lors de son exécution, et le problème central est lié à la ligne Me.Requery dans une logique qui implique l'ouverture conditionnelle de formulaires. Des éléments de réponse essentiels indiquent que le souci est partiellement résolu mais qu'une erreur subsiste à la ligne Me.Requery, sans qu'une cause claire soit précisée. La discussion évoque aussi des approches liées à l'ouverture conditionnelle des formulaires (menu1, menu) selon le type d'utilisateur, et des tentatives d'authentification qui influent sur le flux. En complément, plusieurs contributions témoignent d'échanges hétérogènes et d'aspects hors sujet sans impact direct sur la résolution, mais la ligne problématique reste au cœur de cet échange et mérite une correction ciblée.

Bobot (l’IA à votre service)
  1. Faire ceci:

    Private Sub Commande8_Click()
    Static i As Byte
    Dim rs As Recordset
    ********Ajouter ceci*************************
    Dim user AS String
    ***********************************
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT [LOGIN],[PASSWORD],[USER] FROM USERS WHERE LOGIN = '" & Me.LOGIN & "' AND [PASSWORD]='" & Me.PASSWORD & "';")
    If Not rs.EOF Then
    **************************************************
    ****Récupérer le user et l'afficher**************
    user = rs("USER")
    ************Gouli lia wach hwa hadak le user ou pas******
    MsgBox(user)
    If User = "administrateur" Then
    stDoName = "menu1"
    DoCmd.OpenForm "menu1", acNormal, , , , acWindowNormal
    End If
    If User = "limite" Then
    DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
    stDoName = "menu"
    DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
    End If
    DoCmd.Close acForm, "accés"
    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
    1. merci bcp bcp j'ai reglé le prb grace a vous
      hé 3andi d'autre probleme j'aurais besoin de toi inchallah
  2. nn
    makhadmatch ba9i le meme prb ma3raftch chno ndir bach yat7al l formulaire selon user
    ila can user=administrateur yat7l l menu1 sinon yat7al menu
    Private Sub Commande8_Click()
    Static i As Byte
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT [LOGIN],[PASSWORD],[USER] FROM USERS WHERE LOGIN = '" & Me.LOGIN & "' AND [PASSWORD]='" & Me.PASSWORD & "';")
    If Not rs.EOF Then
    If User = "administrateur" Then
    stDoName = "menu1"
    End If
    DoCmd.OpenForm "menu1", acNormal, , , , acWindowNormal
    If User = "limite" Then
    DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
    stDoName = "menu"
    End If
    DoCmd.Close acForm, "accés"
    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
    chouf ila banlak chi erreur
    1. Donc au niveau de cette ligne il faut récupérer aussi la variable "USER"
      Set rs = db.OpenRecordset("SELECT [LOGIN],[PASSWORD] FROM USER WHERE LOGIN = '" & Me.LOGIN & "' AND [PASSWORD]='" & Me.PASSWORD & "';")

      C'est à dire :
      select login, password, user into :login-loc , :password-loc, :user-loc where login = me.login and password = Me.password.

      "Choufi ntia la syntaxe de la requette ok"

      login-loc, password-loc et user-loc sont des variables locales à déclarer (dim login-loc.....par exemple) pour stocker les info issus de la base ensuite:

      Afficher "user-loc " (Msgbox(user-loc )) chofi achnou fiha 3ad diri les tests.

      si user-loc = "administrateur"
      ouvrir menu1

      sinon

      ouvrir menu

      endif

      Hani 3ta9tek wakha ntia 3yana m3a rassek gelna lik sifti hadakchi dialek f mail mabritich (c'est: amine-sys).
      Bon thlay o bslama 3lik
      1. wa l rah seaft lik dakchi f l yahoo howa w num de tel rah 3raftak nta amine ok
        rah zadt login omadar walo
      2. chof dak num 3andak t3ayat fiha ok
    2. hadik la variable rah c'est un champs de la table tu vois???ma3raft mandir 3ta9ni rah mab9a walo khassni nkaml l'application
      chokran
      1. Donc ta variable "USER" mafiha walou hadchi li gelna lik. choufi fine jebti hadik la variable.
        1. Faites ceci:

          MsgBox (User ) /////Pour voir le contenu de ta variable d'abord:

          If User = "administrateur" then

          menu1.Show
          menu.Hide

          Else

          menu1.Hide
          menu.Show

          End if
          1. j ai fai
            MsgBox (User ) mais un message box s affiche vide
            pour .show en vba il n ya pas cette fonction
        2. Aprés les if les deux formulaires se lancent : c'est à dire tes lignes sont correctes le problème donc c'est au niveau de ton test: Afficher la variable user et voir s'elle prend bien les valeurs "administrateur" et "limite"

          Ton test ça marche pas,
          1. oui la variable user de la table prend les valeurs administrateur et limite
            voila le code
            est ce qu'on doit mettre les 2 lignes aprés if ou quoi?????????????????????????
            :Private Sub Commande4_Click()
            Static i As Byte
            Dim rs As Recordset
            Set db = CurrentDb
            Set rs = db.OpenRecordset("SELECT [LOGIN],[PASSWORD] FROM USER WHERE LOGIN = '" & Me.LOGIN & "' AND [PASSWORD]='" & Me.PASSWORD & "';")
            If Not rs.EOF Then
            If User = "administrateur" Then
            stDoName = "menu1"

            End If
            DoCmd.OpenForm "menu1", acNormal, , , , acWindowNormal
            If User = "limite" Then
            stDoName = "menu"

            End If
            DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "Formulaire1"
            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
        3. le probléme n est pas dans les variables je crois le probléme réside dans ces lignes
          DoCmd.OpenForm "menu1", acNormal, , , , acWindowNormal
          DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
          je ne sais pas exactement ou les pllacer
          car quand je les mis aprés les if les 2 formulaires se lancent et qund je les place dans if ils ne se lancent pas c ca le prb
          1. Tu dit que les deux formulaires se lancent tous les deux:

            Ton message:
            mais quand j'execute les deux formulaires se lancent les deux a la fois quelque soit le type de user il parait qu il ya une erreur est ce que je peux t envoie le code et m aider a le corriger??

            Maintenant tu me dit qu'aucun de tes formulaires ne se lance!!! Bon est ce que ta variable cotient d'abord "administrateur" et "limie" ? est ce que tu l'a affiché ?
            1. aide moi stp!!!
          2. Afficher la variable "USER" et voir ce qu'il y' a de dans. supprimer le "é" de : "limité"
            1. c fait mais mois j ai 2 formulaires "menu" et "menu1" je veux que si user=administrateur c le premier qui se lance et si user=limite c le deuxieme qui se lance mais quand j execute le code ni l un ni l autre ne se lance merci pour ton aide
          3. non pas l'erreur de l autre fois
            et oui biens sur je suis en bts gi meis je n ai jamais etudié vba et j ai arriver a réaliser plusieurs choses compris??
            1. Il faut donc prendre un livre alors pour comprendre le language VBA car c'est pas en un jour que t'apprends le VBA
            2. @sanaeNon tu sais pas.

              Tu n'eprouve aucun égard envers les personnes.

              Tu veux juste réaliser ton application pour que ton responsable ou tuteur soit content.

              Mais ce n'est pas l'essentiel.

              Retiens bien cela dans ta tête.
            3. @nvarospour qui tu es faché ou koi je suis vraiment désolé si je t'ai dit quelque chose de mal tu t enfou de ce que ja dit désolé
              m ai je n ai pas le choix je doit le réaliser pas pour que le tuteur soit content mais dans ma soutenance je doit présenter une bonne application
            4. @nvarosmais il me parait que tu ne vex pas m aider
              c pas grave je vais trouver quelqu un d autre
          4. le voila
            Private Sub Commande4_Click()
            Static i As Byte
            Dim rs As Recordset
            Set db = CurrentDb
            Set rs = db.OpenRecordset("SELECT [LOGIN],[PASSWORD] FROM USER WHERE LOGIN = '" & Me.LOGIN & "' AND [PASSWORD]='" & Me.PASSWORD & "';")
            If Not rs.EOF Then
            If User = "administrateur" Then
            stDoName = "menu1"
            DoCmd.OpenForm "menu1", acNormal, , , , acWindowNormal
            End If
            If User = "limité" Then
            stDoName = "menu"
            DoCmd.OpenForm "menu", acNormal, , , , acWindowNormal
            End If
            DoCmd.Close acForm, "Formulaire1"
            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
            1. Pas trouvé encore.

              Vraiment, tu es en BTS génie informatique et tu n'arrives pas a trouvé l'erreur toute seule.
            2. @nvarosje crois que toi meme tu n a pas arriver a la trouver n est ce pas pcq je n ai recu aucune aide de ta part!!
          5. d accord mais tu vas me répondre le plus vite possible stp pcq ca doit etre une petite erreur merci
            je te l envoie mnt
            • 1
            • 2
            • 3