VBA ACCESS

Résolu
Bonjour,

Je suis en train d'établir un programme sur VBA mais je débute et je rencontre pas mal de difficultés.
La j'ai un gros problement avec les "MoveFirst" et "MoveNext" dans ma fonction. Un message d'erreur apparait: "Aucun enregistrement en cours". 

Voici ma fonction:
_________________________________________________________________________________________
Sub MeF_Gale()

DoCmd.SetWarnings False

Dim CSQL As String
Dim ReqTemp As Recordset
Dim TableTemp As Recordset
Dim CsqlTemp As Recordset
Dim VarID As String
Dim VarClasse As Integer

Set db = DBEngine(0)(0)
Set ReqTemp = db.OpenRecordset("R_Import_Vols_MaJ_Classe_2")
Set TableTemp = db.OpenRecordset("T_Import_Temp_4_Classe")

    ReqTemp.MoveFirst        '''-----C'est ici que ca bloq

'''ETC.----------------------


End sub
____________________________________________________________________________________________

Voila, si vous pouvez m'aider, je vous en remercie d'av
ance

10 réponses

  1. Bonjour

    jec rois que la syntaxe est:
    Set ReqTemp = db.OpenRecordset("R_Import_Vols_MaJ_Classe_2", dbOpenTable)
    Set TableTemp = db.OpenRecordset("T_Import_Temp_4_Classe", dbOpenTable)

    Ciao
    1. OK. j vais essayer ta syntaxe pour voir si ca marche.
      Sinon j ai pas essayé avec un select*, mais ca sert a quoi?

      Ect ce que mon probleme peut venir du fait que ma table est vide?
      1. lol ben oui si ta table est vide .... ta requete ne retourne rien :os
        1. Et si la base est vide(dans certain cas) justement comment on fait pour éviter ce message d'erreur ?
          Pourtant j'ai bien mis un On error Goto .....
          voilà le bout de code :
          entrée :
          Set DB = CurrentDb

          Dim test2 As DAO.Recordset

          On Error GoTo entrée2
          Set test2 = DB.OpenRecordset("SELECT SP2.elementmachine AS element1 FROM SP2 WHERE (((SP2.errorcode) Like '" & coderror & "'));")
          Element = test2!element1

          Or il arrive qu'un Code erreur trouvé ne soit pas dans la base de donné et donc je voudrais que élément soit = ""

          moi le On error Goto ne fonctionne pas j'ai toujours le message d'erreur : Aucun enregistrement en cours ...

          Merci de vos réponse
      2. il faut plutôt faire : On Error Resume Next et gérer l'erreur:

        On Error Resume Next
        .....
        ....
        
        If Err.Number <> 0 Then
          'code en cas d'erreur ex: un message d'alerte
          Exit Sub  ' on sort de la procédure
        Else     'sinon
          'code à exécuter si pas d'erreur
        End If


        ;o)
        1. Et si je ne veux pas sortir de ma procédure et je veut juste qu'il insert element = ""
          qu'il continu sa boucle normalement à chaque fois qu'il croise une erreur qu'il ne connait pas...
      3. ça veut dire qu'il faut que tu fasses une récursive ... et enlever Exit Sub ... tu peux également tester le recordset par RecordSet.Count qui renvoie le nombre d'enregistrement. Si = 0 alors élément ="" ...

        ;o)
        1. je ne suis pas sur d'avoir bien compris le Recordset.Count

          sSQL4 = "Select elementmachine From SP2 Where errorcode Like '" & coderror & "';"

          'Ouverture du recordset -> execution de la requête
          Set rst5 = DB2.OpenRecordset(sSQL4, dbOpenForwardOnly, dbReadOnly)
          If rst5.Count = 0 Then
          GoTo entrée2
          End If
          'si le code existe, définition de l'élément et du descriptif
          Element = rst5.Fields("elementmachine")

          Il me met membre de méthode ou de données introuvable
      4. fait :
        Dim nb As Long

        et après l'exécution de la requête :

        nb = rst5.RecordSet.Count
        If nb = 0 then
        ....

        ;o)
        1. Erreur de compilation : Membre de méthode ou de données introuvable :-/

          Set rst5 = DB2.OpenRecordset(sSQL4, dbOpenForwardOnly, dbReadOnly)
          nb = rst5.Recordset.Count
          If nb = 0 Then
          GoTo entrée2
          End If
      5. Sujet ancien mais pour répondre, la syntaxe est du type:

        dim ReqTemp as recordset

        Set ReqTemp = db.OpenRecordset("R_Import_Vols_MaJ_Classe_2")

        if(ReqTemp.RecordCount>0)then
        ReqTemp.MoveFirst
        'code ici
        else

        end if