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

Access Discussion :

Paramètre attendu


Sujet :

Access

  1. #1
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut Paramètre attendu
    Salut à tous..

    J'ai une requete paramétré (1 en l'occurence..) et un formulaire avec liste déroulante.
    Voici le SQL de la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Contrat.[N°Contrat], Commune.[N°Commune], Commune.Nom_commune, Contrat.Type_contrat, Commune.Adresse_commune, Commune.CP_commune, Commune.Ville_commune, Max(Contrat.Date_début_contrat) AS [Date de début], Max(Contrat.Date_fin_contrat) AS [Date de fin], Courrier.Appel_AQ, Courrier.Date_appel_AQ, Courrier.Année_courrier, District.District, District.Civilité, District.Nom_Responsable, District.Adresse_district, District.Comp_Adr_district, District.CP_district, District.Ville_district, District.[N°téléphone_district], [Année_courrier]-1 AS [Année_N-1]
    FROM (District INNER JOIN Sous_district ON District.[N°District] = Sous_district.[N°District]) INNER JOIN ((Commune INNER JOIN Contrat ON Commune.[N°Commune] = Contrat.[N°Commune]) INNER JOIN Courrier ON Contrat.[N°Contrat] = Courrier.[N°Contrat]) ON Sous_district.[N°Sous_district] = Commune.[N°Sous_district]
    GROUP BY Contrat.[N°Contrat], Commune.[N°Commune], Commune.Nom_commune, Contrat.Type_contrat, Commune.Adresse_commune, Commune.CP_commune, Commune.Ville_commune, Courrier.Appel_AQ, Courrier.Date_appel_AQ, Courrier.Année_courrier, District.District, District.Civilité, District.Nom_Responsable, District.Adresse_district, District.Comp_Adr_district, District.CP_district, District.Ville_district, District.[N°téléphone_district], [Année_courrier]-1, Commune.[N°Commune]
    HAVING (((Contrat.[N°Contrat])=[Formulaires]![Edition AQ]![Contrats]) AND ((Max(Contrat.Date_fin_contrat))<>"01/01/" & (Year(Date()))) AND ((Courrier.Appel_AQ)=-1) AND ((Courrier.Année_courrier)=Year(Date())))
    ORDER BY Commune.Nom_commune;
    Quand je sélectionne l'enregistrement dans le formulaire à l'aide de la liste déroulante Contrats et que j'éxecute la requete : aucun problème.
    Là ou ça marche pas c'est quand j'exécute la requete à partir du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DoCmd.TransferText acExportMerge, "", "AQ_bilan_en_cours_contrat", "D:\BaseCE\3ème_projet\Courriers\AQ_bilan_en_cours_contrat.txt", True, ""
    doc1 = "D:\BaseCE\3ème_projet\Courriers\CECTLencourscontrat.doc"
    Set requete1 = Application.CurrentDb.OpenRecordset("AQ_bilan_en_cours_contrat")
    DoCmd.TransferText acExportMerge, "", "AQ_bilan_nouveau_contrat", "D:\BaseCE\3ème_projet\Courriers\AQ_bilan_nouveau_contrat.txt", True, ""
    doc2 = "D:\BaseCE\3ème_projet\Courriers\CECTLnouveaucontrat.doc"
    Set requete2 = Application.CurrentDb.OpenRecordset("AQ_bilan_nouveau_contrat")
    Je n'ai peut être pas les yeux en face des trous... je vois pas ce qui coince...
    Merci.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Quand je sélectionne l'enregistrement dans le formulaire à l'aide de la liste déroulante Contrats et que j'éxecute la requete : aucun problème.
    Là ou ça marche pas c'est quand j'exécute la requete à partir du formulaire:
    moi pas comprendre :-(
    lol

    sinon vérifis-tu dans ton code que la liste n'a pas une valeur nul?
    attention si tu lances le code sur un bouton et non aprés maj de ta liste il te faut peut-être forcer sa maj en changeant de control avant avec (s'il n'y a pas d'autre control de ta liste créé en un caché)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    docmd.gotocontrol control.name

  3. #3
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut Coyott
    Je vais "essayer" d'être plus précis
    Citation Envoyé par coyott
    Quand je sélectionne l'enregistrement dans le formulaire à l'aide de la liste déroulante Contrats et que j'éxecute la requete : aucun problème.
    Là ou ça marche pas c'est quand j'exécute la requete à partir du formulaire:
    moi pas comprendre :-(
    lol
    En fait, je selectionne mon enregistrement avec la liste déroulante, puis je vais dans l'onglet requete et exécute "manuellement" la requete en question : ça marche.
    Par contre si j'exécute la requete en cliquant sur le bouton.. *%!# marche pas...
    Citation Envoyé par coyott
    sinon vérifis-tu dans ton code que la liste n'a pas une valeur nul?
    attention si tu lances le code sur un bouton et non aprés maj de ta liste il te faut peut-être forcer sa maj en changeant de control avant avec (s'il n'y a pas d'autre control de ta liste créé en un caché)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    docmd.gotocontrol control.name
    La vérification de la requete ne possédant pas d'enregistrement se fait après avant de lancer la fonction publipostage et ne pose pas de problème... sauf sur la requete paramétrée..
    Je vais faire ce test avant pour voir... et je te tiens au courant.

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Je n'arrive toujours pas à exécuter mon code, alors j'ai la question suivante :
    Est-il possible de réaliser ce que je veux ??
    Certainement.. Mais comment : telle est la question.
    Comment insérer le paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Formulaires]![Edition AQ]![Contrats]
    sur cette ligne de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set requete1 = Application.CurrentDb.OpenRecordset("AQ_bilan_en_cours_contrat")
    Merci...

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    J'ai peut être une solution....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set requete1 = CurrentDb.QueryDefs("AQ_bilan_en_cours_contrat")
    With requete1
    .Parameters("[N°Contrat]") = Me.Contrats
    .Execute
    End With
    Je la teste et alea jecta est...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set requete1 = Application.CurrentDb.OpenRecordset("select AQ_bilan_en_cours_contrat.* from AQ_bilan_en_cours_contrat where [N°Contrat] = " &  Me.Contrats)

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut Coyott
    1) je te remercie bien de te pencher sur mon cas (désepéré ??)
    2).... ça marche pas

    Toujours le même message...
    trop peu de paramètre. 1 attendu

  8. #8
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    hum...

    déjà avant ta requête fait ceci

    debug.print "select AQ_bilan_en_cours_contrat.* from AQ_bilan_en_cours_contrat where [N°Contrat] = " & Me.Contrats

    et donne le résultat ( il se situe dans l'écran debug) qu'on voit ce qui cloche dans cette requête.

    edit :
    ah et N°contrat est bien de type numérique ?

  9. #9
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Le message a changé...
    "Erreur de syntaxe opérateur absent..."
    J'ai access qu'a planté.. le c**.... le temps de le rédémarer et je te dis.
    Mais il me semble que ta soluce a fonctionné...

    N°Contrat est bien de type numérique (N°Auto)

  10. #10
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    C'est bon ça fonctionne !!!
    Vu les modifications apportées :
    1) j'ai fais sauté le critère dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING (((Contrat.[N°Contrat])=[Formulaires]![Edition AQ]![Contrats])
    2) j'ai mis ton code et ça fonctionne.

    Mais ça n'a pas l'effet escompté... y me sort tous les enregistrements

  11. #11
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Pour contourner mon problème, je me suis lancé (ai-je eu raison ???) dans la création de la requête à l'aide de cet article de la FAQ.
    http://access.developpez.com/faq/?page=Manip#ReqModADO
    1er obstacle : CurrentProject que j'ai remplacé par Application.CurrentDb
    le 2 ème :
    Message d'erreur : Opération non autorisé sur ce type d'objet.
    La ligne en cause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MCat.ActiveConnection = Application.CurrentDb.Connection
    Edit : je suis sous access 97...
    j'ai activé les 2 références indiquées dans la FAQ.

  12. #12
    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 : 40
    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
    A priori là tu mélanges ADO et DAO

    Quel est le but ?

  13. #13
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    A priori là tu mélanges ADO et DAO
    Wouais, je m'en suis rendu compte.
    C'est en faisant des erreurs que l'on progresse... je me suis rendu compte (je me répete là.. la fatigue peut être..) que sous 97 il y a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set querydef = object.CreateQueryDef (name, sqltext)
    Pour résumer, j'ai une liste déroulante qui me permet d'obtenir un enregistrement, à partir d'un clic sur un bouton, j'exécute une requete avec un paramètre, pour ensuite effectuer un publipostage avec cette requete.
    Mon soucis actuel : le paramètre ne fonctionne pas... enfin uniquement lorsque j'exécute la requete en double-cliquant dessus...
    Donc j'en suis arrivé à écrire ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set requete1 = Object.CreateQueryDef("AQ_bilan_en_cours_contrat", "select AQ_bilan_en_cours_1.* from AQ_bilan_en_cours_1 where [N°Contrat] = " & Me.Contrats)
    If requete1.RecordCount < 1 Then
    Reqvide1 = True
    Else
    DoCmd.TransferText acExportMerge, "", "AQ_bilan_en_cours_contrat", "N:\Commun-AS\Base AS\Courriers\AQ_bilan_en_cours_contrat.txt", True, ""
    doc1 = "N:\Commun-AS\Base AS\Courriers\CECTLencourscontrat.doc"
    End If
    et là... je suis à 2 doigts de réussir (enfin je pense)
    Il faut que je remplace Object par le nom d'une variable.
    mais j'ai déjà un nom de variable : requete1.

  14. #14
    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 : 40
    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
    Et bien Object c'est CurrentDB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set requete1 = CurrentDb.CreateQueryDef("AQ_bilan_en_cours_contrat", "select AQ_bilan_en_cours_1.* from AQ_bilan_en_cours_1 where [N°Contrat] = " & Me.Contrats) 
    If requete1.RecordCount < 1 Then 
    Reqvide1 = True 
    Else 
    DoCmd.TransferText acExportMerge, "", "AQ_bilan_en_cours_contrat", "N:\Commun-AS\Base AS\Courriers\AQ_bilan_en_cours_contrat.txt", True, "" 
    doc1 = "N:\Commun-AS\Base AS\Courriers\CECTLencourscontrat.doc" 
    End If

  15. #15
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Merci !!!
    Encore une petite question....
    La requete existe déjà. Que me conseilles tu :
    1) l'écraser à chaque fois
    2) la supprimer dès que j'en ai plus besoin ??

  16. #16
    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 : 40
    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
    Mon conseil :

    Si la requete existe la modifier, et si elle existe pas la créer (cela évite les bug)

    Donc il te faut tester si elle existe ou pas donc dans ton code, ajouter cette petite fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Function TestExistenceRequete(Nom As String, Db As DAO.Database) As Boolean
    On Error GoTo err
    Dim rqt As DAO.QueryDef
    'Essaye d'accéder à la requete
    Set rqt = Db.querydets(Nom)
    'Si acces = Ok alors renvoyer true
    TestExistenceRequete = True
    err:
    End Function
    Et ton code principal devient :

    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
    Dim NomRequete As String
    Dim oRqt1 As DAO.QueryDef
    Dim oDb As DAO.Database
    Dim SQL As String
    SQL = "select AQ_bilan_en_cours_1.* from AQ_bilan_en_cours_1 where [N°Contrat] = " & Me.Contrats
    NomRequete = "AQ_bilan_en_cours_contrat"
    'Teste l'existence de la requete et s'il elle existe la modifie
    If TestExistenceRequete(NomRequete, oDb) Then
      Set oRqt1 = oDb.QueryDefs(NomRequete)
      oRqt1.SQL = SQL
    Else
      'Crée la requete
      Set oRqt1 = CurrentDb.CreateQueryDef(NomRequete, SQL)
    End If
    'Rafraichit la liste des requetes
    oDb.QueryDefs.Refresh
    'Si la requete n'est pas vide, alors exporte
    If oRqt1.RecordCount > 0 Then
    DoCmd.TransferText acExportMerge, "", NomRequete, "N:\Commun-AS\Base AS\Courriers\AQ_bilan_en_cours_contrat.txt", True, ""
    doc1 = "N:\Commun-AS\Base AS\Courriers\CECTLencourscontrat.doc"
    End If
    Tu remarqueras que j'ai commenté le code et aussi déclarer les variables, tout cela est impératif. De même pour pouvoir utiliser DAO, il te faut ajouter la référence Microsoft DAO Object Library à ton projet (Sous VBA/Menu Outils/Réference)

    Enfin pour plus de détails, je te propose un cours complet (100 pages)

    http://warin.developpez.com

  17. #17
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Merci beaucoup.
    J'ai pu résoudre mon problème... en supprimant et en récréant la requete.
    Mais je vais tout de même suivre ton conseil.
    En tout cas merci à toi et à Coyott.

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

Discussions similaires

  1. Liste de paramétres attendu par un rapport
    Par HadanMarv dans le forum Jasper
    Réponses: 5
    Dernier message: 16/12/2010, 11h02
  2. Trop peu de paramètres attendu ?
    Par devdev dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/05/2009, 16h57
  3. Requete de mise a jour : paramètre attendu
    Par le_niak dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/03/2007, 11h52
  4. Message "Trop peu de paramètres attendu. 4"
    Par Daniel MOREAU dans le forum Access
    Réponses: 4
    Dernier message: 12/04/2006, 09h55
  5. Access et Excel : Paramétre attendu
    Par priest69 dans le forum Access
    Réponses: 4
    Dernier message: 20/10/2005, 11h48

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