424-Objet requis : INSERT/SELECT SQL

Bonjour a toutes et a tous,

J'ai l'erreur "424-Objet requis" qui ressort lors de l'exécution de ma fonction VBA.

Qui est:
-----------------------------------------------------------------------
Public Function MAJ_SCAT_Avoirs()

    Dim rst As DAO.Recordset
    Dim Cible As String
    Dim Origine As String
    Dim Val As Integer
    
    
    sql = "SELECT NCMD FROM TD_MargeOnline WHERE TCMD=3 OR TCMD=4 ;"
    Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
        
    While Not rst.EOF And rst.BOF
        Cible = rst!NCMD
           
        sql = "SELECT NFAR FROM TD_Avoirs WHERE NCMD=" & Cible & ";"
        Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
            Origine = rst!NFAR
        
        Val = DLookup("[S-CAT]", "TD_MargeOnline", "[NCMD]='" & Origine & "'")
        
        db.Execute "UPDATE TD_MargeOnline SET TD_MargeOnline.S-CAT =" & Val & "WHERE TD_MargeOnline.NCMD=" & Cible & ";"
        
        'passage a la ligne suivante
        rst.MoveNext
    Wend

End Function

-------------------------------------------------------------

Je me remet au savoir infini des utilisateur de ce forum...
Merci a vous par avance a bientôt.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.

5 réponses

  1. Bonjour,

    Je crois que tu as oublié de déclarer sql en tant que variable
    1. Voila le code après modif :
      ---------------------------------------------------------------------------------
      Public Function MAJ_SCAT_Avoirs()
      
          Dim rst As DAO.Recordset
          Dim Cible As String
          Dim Origine As String
          Dim Val As Integer
          Dim sql As String
          
          
          sql = "SELECT NCMD FROM TD_MargeOnline WHERE TCMD=3 OR TCMD=4 ;"
          Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
              
          While Not rst.EOF And rst.BOF
              Cible = rst!NCMD
                 
              sql = "SELECT NFAR FROM TD_Avoirs WHERE NCMD=" & Cible & ";"
              Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
                  Origine = rst!NFAR
              
              Val = DLookup("[S-CAT]", "TD_MargeOnline", "[NCMD]='" & Origine & "'")
              
              db.Execute "UPDATE TD_MargeOnline SET TD_MargeOnline.S-CAT =" & Val & "WHERE TD_MargeOnline.NCMD=" & Cible & ";"
              
              'passage a la ligne suivante
              rst.MoveNext
          Wend
      
      End Function
      

      -----------------------------------------------------------------------------------------
      L'erreur ressort toujours :'(

      EDIT : Ajout des balises de code (la coloration syntaxique).
      Explications disponibles ici :
      https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

      Merci d'y penser dans tes prochains messages.
      .
    2. db.Execute "UPDATE TD_MargeOnline SET TD_MargeOnline.S-CAT =" & Val & "WHERE TD_MargeOnline.NCMD=" & Cible & ";"

      c'est pas plutôt :
      db.Execute("UPDATE TD_MargeOnline SET TD_MargeOnline.S-CAT =" & Val & "WHERE TD_MargeOnline.NCMD=" & Cible & ";");
    3. ça ne fonctionne pas :'(
    4. sans le point virgule à la fin de ma phrase my bad je suis en plein java la lol. Toujours la même erreur ?
    5. j'avais enlever le ";" et ça n'a pas fonctionner
      je ne comprend pas le sens de l'erreur méme dans la doc de microsoft ce n'est pas très clair
  2. Contributeur
    bonjour
    syntaxe SQl variable de type string
    '" &cible & "' 
    soit apostrophe guillemets variable guillemets apostrophe
    ou
    ["cible"]
    --

    a voir
    en VBA Val est un mot réservé
    et si la valeur c'est un nombre tu peux marqué directement
    S-CAT =Valeur suivi d'un espace avant where

    Michel
    1. J'ai revérifier la syntaxe des mes requêtes par rapport a ton conseil mais ça na rien changer toujours la même erreur :/
  3. --------------------------------------------------------------------------
    Public Function MAJ_SCAT_Avoirs()
    
        Dim rst As DAO.Recordset
        Dim Cible As String
        Dim Origine As String
        Dim valeur As Integer
        Dim sql As String
        
        
        sql = "SELECT NCMD FROM TD_MargeOnline WHERE TCMD=3 OR TCMD=4 ;"
        Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
            
        While Not rst.EOF And rst.BOF
            Cible = rst!NCMD
               
            sql = "SELECT NFAR FROM TD_Avoirs WHERE NCMD=" & Cible & ";"
            Set rst = db.OpenRecordset(sql, dbOpenSnapshot)
                Origine = rst!NFAR
            
            valeur = DLookup("[S-CAT]", "TD_MargeOnline", "[NCMD]='" & Origine & "'")
            
            db.Execute ("UPDATE TD_MargeOnline SET TD_MargeOnline.S-CAT =" & valeur & "WHERE TD_MargeOnline.NCMD='" & Cible & "';")
            
            'passage a la ligne suivante
            rst.MoveNext
        Wend
    
    End Function
    

    ------------------------------------------------------------------------
    Voila la dernière version du code.
    Si quelqu'un voie la moindre erreur même un simple caractère un espace ou quoi que ce soit , qu'il me le signal.
    J'en peut plu de ce problème :'( la solution doit être toute simple mais je ne la vois pas.
    Je désespère...

    Je vous remercie d'avance

    EDIT : Ajout des balises de code (la coloration syntaxique).
    Explications disponibles ici :
    https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    Merci d'y penser dans tes prochains messages.
    .
    1. Bonjour,

      Manque un espace devant le WHERE TD_MargeOnline

      et votre erreur est sur quelle ligne (si ligne surlignee)
      1. J'ai ajouter l'espace devant le where.
        Lors du plantage il ne propose pas d'accéder au debuggeur :/
        L'erreur vient forcement de cette fonction étant donné qu'il n'est survenu qu'apres son implémentation
    2. Contributeur
      Bonjour
      sql = "SELECT NFAR FROM TD_Avoirs WHERE NCMD=" & Cible & ";" 
      

      Cible est du texte donc syntaxe comme tu l'as écrit + plus bas

      je ne connais pas ce que tu veux faire mais tu as des relations entre 2 tables margeonline et avoirs: l'emploi des jointures ne pourraient elles pas être utilisées dans ton cas ?

      **** Attention ****
      Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
      Explications disponibles ici :
      https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

      .

      Michel