IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Openrecordset sur une requête : erreur 424 objet requis / éviter état vide [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Openrecordset sur une requête : erreur 424 objet requis / éviter état vide
    Bonsoir,
    j'édite des BC selon une requête. Je souhaite ne pas imprimer les états "vides"
    J'ai trouvé sur le forum un bout de code correspondant à mon besoin.

    Mais en l'adaptant à mon code, j'ai une erreur 424 objet requis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub Report_Open(Cancel As Integer)
    Dim rst As DAO.Recordset, StrSql As String
    requete = "SELECT ACCESS_ENTETES_VTES.NUM_ORD, ACCESS_ENTETES_VTES.TYP_PIE, ACCESS_ENTETES_VTES.CODE_STATUT, " _
    & "ACCESS_ENTETES_VTES.COD_CLT, ACCESS_ENTETES_VTES.DAT_PIE, ACCESS_ENTETES_VTES.COD_REP, ACCESS_ENTETES_VTES.CLT_FAC, " _
    & "ACCESS_ENTETES_VTES.FLG_MAJ, ACCESS_ENTETES_VTES.MT_HT, ACCESS_ENTETES_VTES.REF_CMD, ACCESS_ENTETES_VTES.SERIE_PIECE, " _
    & "ACCESS_ENTETES_VTES.TYP_LIGNE, ACCESS_LIGNES_VTES.NUM_ORD, ACCESS_LIGNES_VTES.COD_ART, ACCESS_LIGNES_VTES.QUANTITE, " _
    & "ACCESS_LIGNES_VTES.PU_BRUT, ACCESS_LIGNES_VTES.TAU_REM_1, ACCESS_LIGNES_VTES.PU_NET, ACCESS_LIGNES_VTES.COD_REP, " _
    & "ACCESS_LIGNES_VTES.MONTANT_HT, ACCESS_LIGNES_VTES.DAT_LIV, ACCESS_LIGNES_VTES.FLG_MAJ, ACCESS_LIGNES_VTES.COD_CLT, " _
    & "ACCESS_LIGNES_VTES.TYP_LIG, ACCESS_LIGNES_VTES.TYP_PIE, ACCESS_LIGNES_VTES.NUM_LIG, dbo_CLIENTS.COD_CLT, dbo_CLIENTS.NOM, " _
    & "dbo_CLIENTS.ADR_1, dbo_CLIENTS.ADR_2, dbo_CLIENTS.ADR_3, dbo_CLIENTS.COD_PST, dbo_CLIENTS.VIL, dbo_CLIENTS.TEL, dbo_CLIENTS.TLC, " _
    & "dbo_CLIENTS.TLX, dbo_CLIENTS.COD_FAM, dbo_CLIENTS.COD_SOU_FAM, dbo_CLIENTS.CPT_AUX, dbo_CLIENTS.CPT_CLF , dbo_CLIENTS.COD_TRF, " _
    & "dbo_CLIENTS.PRC_REM, dbo_CLIENTS.COD_FAC, dbo_CLIENTS.FAC_POR, dbo_CLIENTS.FAC_FRA, dbo_CLIENTS.REP, dbo_CLIENTS.RGL, " _
    & "dbo_CLIENTS.FLG_SML, dbo_REPRESENTANTS.COD_REP, dbo_REPRESENTANTS.NOM_REP, FamilleRegroupement.COD_REGROUPEMENT, dbo_ARTICLES.DGN, " _
    & "dbo_MDR.LIB_RGL FROM (dbo_MDR INNER JOIN (dbo_REPRESENTANTS INNER JOIN " _
    & "(ACCESS_ENTETES_VTES INNER JOIN dbo_CLIENTS ON ACCESS_ENTETES_VTES.COD_CLT=dbo_CLIENTS.COD_CLT) " _
    & "ON dbo_REPRESENTANTS.COD_REP=ACCESS_ENTETES_VTES.COD_REP) ON dbo_MDR.MDR=dbo_CLIENTS.RGL) INNER JOIN " _
    & "(FamilleRegroupement INNER JOIN (dbo_ARTICLES INNER JOIN ACCESS_LIGNES_VTES ON dbo_ARTICLES.COD_ART=ACCESS_LIGNES_VTES.COD_ART) " _
    & "ON FamilleRegroupement.COD_FAMILLE=dbo_ARTICLES.COD_FAM) ON ACCESS_ENTETES_VTES.NUM_ORD=ACCESS_LIGNES_VTES.NUM_ORD " _
    & "WHERE (((ACCESS_ENTETES_VTES.NUM_ORD)=Formulaires![Bon de commande]!NUM_ORD)And ((FamilleRegroupement.COD_REGROUPEMENT)=""3"" ));"
    Set rst = Db.OpenRecordset(requete)
    ''Set rst = CurrentDb.OpenRecordset(StrSql)
    If rst.EOF Then MsgBox "No data"
    Set rst = Nothing
    
    End Sub
    Sauriez-vous me dire où je me trompe ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Où as-tu déclaré ta variable "requete" ?

    De plus, il y a une autres solution, plus simple : http://access.developpez.com/faq/?page=Report#noData

    Philippe

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Bonjour et merci pour ta solution.

    Elle marche mais me génère un message d'avertissement d' Access
    "L'action Open Report a été annulée. Erreur 2501"
    J'ai trouvé dans la FAQ ce bout de code à ajouter : Je l'ai mis ainsi
    Mais cela ne fait rien de plus.
    Est-ce que je me trompe sur son application ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Report_NoData(Cancel As Integer)
        MsgBox "Impossible d'ouvrir l'état : aucune données à afficher", vbCritical
        Cancel = True
    End Sub
    Private Sub OpenReport()
    On Error GoTo err_OpenReport
     
        DoCmd.OpenReport ("BC_REG3")
     
     
    err_OpenReport:
         Select Case Err.Number
            Case 2501
                'rien à faire
            Case Else
                MsgBox Err.Description
        End Select
    End Sub

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    L'objet Db n'est pas déclaré ni instancié

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    bonsoir,
    je reviens vers vous car j'arrive à faire fonctionner le code mais j'ai un petit couac.
    J'ai 4 états : actuellement, je sais, dans mes tests, que mon état 3 sort vide, donc j'ai mis sur sa propriété :sur aucune donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Report_NoData(Cancel As Integer)
        MsgBox "Pas de BC pour le regroupement 3", vbCritical
        Cancel = True
    End Sub
    Dans mon formulaire, sur le bouton -click, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub CmdImprimerLesBC_Click()
     
        On Error GoTo err_OpenReport
        DoCmd.OpenReport ("BC_REG1"), acPreview
     
     
        On Error GoTo err_OpenReport
        DoCmd.OpenReport ("BC_REG2"), acPreview
     
     
        On Error GoTo err_OpenReport
        DoCmd.OpenReport ("BC_REG3"), acPreview
     
        On Error GoTo err_OpenReport
        DoCmd.OpenReport ("BC_REG4"), acPreview
     
    err_OpenReport:
        Select Case Err.Number
            Case 2501
                'rien à faire
            Case Else
                MsgBox Err.Description
                MsgBox "Ici err.description ds nodata", vbCritical
        End Select
     
    End Sub
    Voilà ce qui se produit :
    L'aperçu de l'état 1 se lance,
    l'aperçu de l'état 2 se lance dans un aute onglet,
    l'aperçu du 3 démarre et se referme (car pas de données)
    MAIS cela s'arrête là !!

    Il ne me lance pas l'aperçu de l'état 4.

    Donc cela veut dire que si c'est l'état 1 qui est vide, rien ne se lancera !

    Aurais-je un moyen pour que tout se lance et seulement le ou les états vides se referment ??
    Merci

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Quel rapport avec le reste de ce post ?

    Que viennent faire tous ces blocs on error ? Enfin, bref, prenons le temps de résoudre la première question avant de tout mélanger

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Bonsoir Tofalu,

    Merci pour tes lectures et réponses. Le rapport avec mon 1 er post peut sembler loin. Mais suite à celui-ci, Philippe JOCHMANS m'a répondu en me donnant un lien vers une solution "différente". J'ai donc suivi la voie.

    Voilà, je ne pensais pas ouvrir un nouveau post mais si c'est préférable, je le fais volontier.
    A+
    Thibault

    P.S : j'édite le post car j'ai trouvé une solution (toujours sur celle proposée par Philippe JOCHMANS). Voici le code au cas où cela peut servir un jour, à un autre forumeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    On Error GoTo Err_Handle
     
    DoCmd.OpenReport ("BC_REG1"), acPreview
    DoCmd.OpenReport ("BC_REG2"), acPreview
    DoCmd.OpenReport ("BC_REG3"), acPreview
    DoCmd.OpenReport ("BC_REG4"), acPreview
    Exit_Handle:
       On Error Resume Next
       Exit Sub
     
    Err_Handle:
        Select Case Err.Number
            Case 2501
                Resume Next
            Case Else
                MsgBox Err.Description
                Resume Exit_Handle
        End Select
    Un grand Merci à vous 2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Find - Erreur 424 - Objet requis
    Par wilfried_42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2009, 09h42
  2. erreur 424, objet requis
    Par Nessie37 dans le forum VBA Access
    Réponses: 8
    Dernier message: 08/01/2009, 12h20
  3. Erreur 424 objet requis
    Par davyvba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 17h52
  4. erreur "424" Objet requis
    Par fifrelin_70 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/10/2007, 19h48
  5. Erreur 424 Objet requis sur connexion à Access
    Par darkian dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo