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 :

requête paramétrée en vba


Sujet :

VBA Access

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut requête paramétrée en vba
    Bonjour
    Encore un pti problème je promes c'est mon dernier.
    J'ai un etat qui a en source une requete paramétrée "RCA2 (année et mois)" et une table "solde"
    et j'ai mis un formulaire "welcome" pour entrer l'année et le mois et sur clic "ok" j'ai mis un code qui fais des calculs et les stockes dans la table "solde" et après l'état s'ouvre or lors de l'ouverture de l'état j'ai encore le mesgbox pour entrer le mois et la date qui est declencher par la requete RCA2
    comment faire pour que la requete source recupere la donnée entrées dans le formulaire "welcome"

  2. #2
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    je ne sais pas si c'est fesable ou pas j'ai mis dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set Tdf = db.QueryDefs("RCA2")
     
      ' Code qui utilise qdf
      ' Par exemple
    Tdf.Parameters("année") = Forms!Welcome.Form!cboannee   '<== si requête paramétrée
    Tdf.Parameters("mois") = Forms!Welcome.Form!mois
    Set mydeb = Tdf.OpenRecordset
     
    Report![CA].RecordSource = "SELECT *, solde.initial, solde.final FROM " & mydeb & " LEFT JOIN solde ON " & mydeb!DateCA & "= solde.DateCA;"
    mais ça me donne incompatibilité de type pour mydeb

  3. #3
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 961
    Par défaut
    Bonsoir,
    le message d'erreur indique que tu veux utiliser un objet recordset (mydeb) à l'intérieur d'un texte ("SELECT * ...)
    il faudrait que tu récupères le texte SQL de "RCA2" contenu dans Tdf.SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Mydeb As String
    Mydeb = Tdf.SQL
    et après il faudrait remplacer les paramètres par leur valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mydeb = Replace(Replace(Mydeb, "L_Annee", tdf.Parameters("année")), "Le_Mois", tdf.Parameters("mois"))
    Les variables L_Annee et Le_Mois sont ceux utilisés dans la clause WHERE.
    ensuite l'utiliser dans le SQL final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Report![CA].RecordSource = "SELECT Mydeb.*, solde.initial, solde.final FROM SOLDE, (" & mydeb & ") AS Mydeb LEFT JOIN solde ON mydeb.DateCA = solde.DateCA;"
    A priori, cela devrait fonctionner. Si ce n'est pas le cas, poste le code de RCA2.

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 961
    Par défaut Un petit oubli
    Bonjour,
    il faut modifier l'instruction Replace pour enlever le point virgule contenu dans Mydeb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mydeb = Replace(Replace(Left(Mydeb, Len(Mydeb) - 1), "L_Annee", tdf.Parameters("année")), "Le_Mois", tdf.Parameters("mois"))

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Bonjour,
    Merci grandbois pour la réponse
    j'ai tjs pas compris c'est quoi " l_annee" et "le_mois"??

  6. #6
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Re,
    j'ai essayé mais ça me renvoie une erreur "objet requis" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Report![CA].RecordSource = "SELECT Mydeb.*, solde.initial, solde.final FROM SOLDE, (" & mydeb & ") AS Mydeb LEFT JOIN solde ON mydeb.DateCA = solde.DateCA;"

  7. #7
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 961
    Par défaut
    peux-tu poster le SQL de la requête RCA2 et le code complet de ta procédure ?
    Merci.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Re,
    voici la requete :s j'avoue qu'elle est un peu longue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS Année Short, Mois Short;
    SELECT RJours.DateJour AS DateCA, nz(Sum([facture_clients.montant_TTC]),0) AS Client, nz(Sum([facture_fournisseurs.montant_TTC]),0) AS fournisseur, nz(Sum([CNSS.montant_TTC]),0) AS CNSS, nz(Sum([Frais_de_banque.montant_TTC]),0) AS FraisBq, nz(Sum([Honoraires_associés.montant_TTC]),0) AS Honorass, nz(Sum([Honoraires_extra_groupe.montant_TTC]),0) AS Honorex, nz(Sum([Honoraires_intra_groupe.montant_TTC]),0) AS Honorint, nz(Sum([Loyer.montant_TTC]),0) AS loyer, nz(Sum([lydec.montant_TTC]),0) AS lydec, nz(Sum([Notes_de_frais_autres.montant_TTC]),0) AS NFb, nz(Sum([notes_de_frais_carte_bleue.montant_TTC]),0) AS NFa, nz(Sum([Salaires_employés.montant_TTC]),0) AS Sem, nz(Sum([Téléphone.montant_TTC]),0) AS Tel, nz(Sum([Voitures.montant_TTC]),0) AS voitures
    FROM ((((((((((((((SELECT DateSerial([Année],[Mois],Tjours.jour) AS DateJour FROM (SELECT top 1 1 AS jour  FROM Facture_clients union SELECT top 1 2 FROM Facture_clients union  SELECT top 1 3 FROM Facture_clients  union SELECT top 1 4 FROM Facture_clients union  SELECT top 1 5 FROM Facture_clients union SELECT top 1 6 FROM Facture_clients  union SELECT top 1 7 FROM Facture_clients union SELECT top 1 8 FROM Facture_clients union  SELECT top 1 9 FROM Facture_clients  union SELECT top 1 10 FROM Facture_clients union SELECT top 1 11 FROM Facture_clients union SELECT top 1 12 FROM Facture_clients  union  SELECT top 1 13 FROM Facture_clients union SELECT top 1 14 FROM Facture_clients union SELECT top 1 15 FROM Facture_clients  union  SELECT top 1 16 FROM Facture_clients union SELECT top 1 17 FROM Facture_clients union SELECT top 1 18 FROM Facture_clients  union SELECT top 1 19 FROM Facture_clients  union  SELECT top 1 20 FROM Facture_clients union SELECT top 1 21 FROM Facture_clients  union SELECT top 1 22 FROM Facture_clients union SELECT top 1 23 FROM Facture_clients union  SELECT top 1 24 FROM Facture_clients  union SELECT top 1 25 FROM Facture_clients union SELECT top 1 26 FROM Facture_clients union  SELECT top 1 27 FROM Facture_clients  union SELECT top 1 28 FROM Facture_clients union SELECT top 1 29 FROM Facture_clients union SELECT top 1 30 FROM Facture_clients union  SELECT top 1 31 FROM Facture_clients)  AS Tjours WHERE Month(DateSerial([Année],[Mois],TJours.jour))=[Mois])  AS RJours LEFT JOIN Facture_clients ON RJours.DateJour=Facture_clients.date_reglement) LEFT JOIN facture_fournisseurs ON RJours.DateJour=facture_fournisseurs.date_reglement) LEFT JOIN CNSS ON RJours.DateJour=CNSS.date_reglement) LEFT JOIN Frais_de_banque ON RJours.DateJour=Frais_de_banque.date_reglement) LEFT JOIN Honoraires_associés ON RJours.DateJour=Honoraires_associés.date_reglement) LEFT JOIN Honoraires_extra_groupe ON RJours.DateJour=Honoraires_extra_groupe.date_reglement) LEFT JOIN Honoraires_intra_groupe ON RJours.DateJour=Honoraires_intra_groupe.date_reglement) LEFT JOIN Loyer ON RJours.DateJour=Loyer.date_reglement) LEFT JOIN Lydec ON RJours.DateJour=Lydec.date_reglement) LEFT JOIN Notes_de_frais_autres ON RJours.DateJour=Notes_de_frais_autres.date_reglement) LEFT JOIN Notes_de_frais_carte_bleue ON RJours.DateJour=Notes_de_frais_carte_bleue.date_reglement) LEFT JOIN Téléphone ON RJours.DateJour=Téléphone.date_reglement) LEFT JOIN Salaires_employés ON RJours.DateJour=Salaires_employés.date_reglement) LEFT JOIN Voitures ON RJours.DateJour=Voitures.date_reglement
    GROUP BY RJours.DateJour
    ORDER BY RJours.DateJour;
    pour le reste de la procédure ça n'a rien à voir avec le bout du code que j'avais mis c'est des calculs pour remplir la table solde mais voila tout mon code
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    db.Execute "Delete * from [SOLDE]"
     
     
     
    Set Qdf = db.QueryDefs("insertion")
      ' Code qui utilise qdf
      ' Par exemple
    Qdf.Parameters("année") = Forms!Welcome.Form!cboannee   '<== si requête paramétrée
    Qdf.Parameters("mois") = Forms!Welcome.Form![mois]
    Qdf.Execute                                     '<== si requête action
     
    Set myrst = CurrentDb.OpenRecordset("solde", dbOpenDynaset)
     
    soldeinit = DLookup("initial", "Solde_initial", "Month(DateCA)=" & Forms!Welcome.Form![mois] & " And Year(DateCA)=" & Forms!Welcome.Form!cboannee)
     
    'si le recordset n'est pas vide
     If Not myrst.EOF Then
         ' tant qu'il n'est pas vide
         Do While Not myrst.EOF
         myrst.Edit
         myrst!initial = soldeinit
         myrst.Update
         soldefin = soldeinit + myrst!diff
     
         myrst.Edit
         myrst!final = soldefin
         myrst.Update
         dateT = myrst!DateCA
         'MsgBox (dateT)
         soldeinit = soldefin
     
         myrst.MoveNext
     
        Loop
    End If
     
    dateTA = dateT + 1
     
    mySql = "SELECT [solde_initial].* From [Solde_initial] where [solde_initial].dateCA = (#" & Format(dateTA, "mm-dd-yyyy") & "#)"
    Set mytst = CurrentDb.OpenRecordset(mySql, dbOpenDynaset)
     
        If Not mytst.EOF Then
            mytst.Edit
            mytst!initial = soldefin
            mytst.Update
        Else
            db.Execute "INSERT INTO Solde_initial(DateCA,initial) VALUES(#" & Format(dateTA, "mm-dd-yyyy") & "#," & soldefin & ");"
        End If
    DoCmd.OpenReport "CA", acViewReport, "", "", acNormal
     
    Set Tdf = db.QueryDefs("RCA2")
     
      ' Code qui utilise qdf
      ' Par exemple
    Tdf.Parameters("année") = Forms!Welcome.Form!cboannee   '<== si requête paramétrée
    Tdf.Parameters("mois") = Forms!Welcome.Form![mois]
    mydeb = Tdf.SQL
    'MsgBox (mydeb)
    'mydeb = Replace(Replace(Left(mydeb, Len(mydeb) - 1), "L_Annee", Tdf.Parameters("année")), "Le_Mois", Tdf.Parameters("mois"))
    'Report![CA].RecordSource = "SELECT Mydeb.*, solde.initial, solde.final FROM SOLDE, (" & mydeb & ") AS Mydeb LEFT JOIN solde ON mydeb.DateCA = solde.DateCA;"
    'Set mydeb = Tdf.OpenRecordset
     
    'Report![CA].RecordSource = "SELECT *, solde.initial, solde.final FROM " & mydeb & " LEFT JOIN solde ON " & mydeb!DateCA & "= solde.DateCA;"
    Reports!CA.Requery
    ' tu fermes/vides tout
    myrst.Close
    Set myrst = Nothing
    mytst.Close
    Set mytst = Nothing
    db.Close
     
     ' Libération de la référence
    Set Qdf = Nothing

  9. #9
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 961
    Par défaut
    Bonsoir,
    tu as 2 choses à faire :
    1) supprimer la ligne PARAMETERS de ta requête.
    2) remplacer cette partie de code (lignes 59 à 61) dans ton Sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mydeb = Replace(Replace(mydeb, "Année", Tdf.Parameters("Année")), "Mois", Tdf.Parameters("Mois"))
    mydeb = Replace(mydeb,";","")
    Report![CA].RecordSource = "SELECT Mydeb.*, solde.initial, solde.final FROM (" & mydeb & ") AS Mydeb LEFT JOIN solde ON mydeb.DateCA = solde.DateCA;"
    Le Replace va remplacer les paramètres par des constantes dans la requête, exemple, si tu as saisi 2012 pour l'année et 11 pour le mois, tu auras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Month(DateSerial(2012,11,TJours.jour))=11)
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Month(DateSerial([Année],[Mois],TJours.jour))=[Mois])

  10. #10
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    Bonjour
    merci grandbois je vais essayer tout de suite et je reviens vers toi
    mais une chose que je n'arrive pas à comprendre c'est quoi année et mois?? (les valeurs par lesquelles les paramètre seront remplacé) moi je veux que ça soit remplacé par les valeurs saisi
    Forms!Welcome.Form!cboannee et Forms!Welcome.Form![mois].

    Re,
    j'ai essayé ça me donne erreur "objet requis" au niveau de l'affectation du recordsource

    Re encore une fois,
    l'erreur "objet requis" est résolu En fait je mettais Report![CA].RecordSource il manquait un "s" et un .Report
    mais il y a encore un problème :s ça me renvoi toujours un msgbox ou s'est écrit pour saisir l'année or que cette fois le nom c'est pas "année" mais c'est "2012" :s:s
    ça vient d’où?

  11. #11
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 961
    Par défaut
    Bonsoir,
    Citation Envoyé par sihamelm Voir le message
    mais une chose que je n'arrive pas à comprendre c'est quoi année et mois?? (les valeurs par lesquelles les paramètre seront remplacé) moi je veux que ça soit remplacé par les valeurs saisi
    Forms!Welcome.Form!cboannee et Forms!Welcome.Form![mois]
    Dans ta requête RCA2 tu utilises [Année] et [Mois]
    Dans ton code, ces deux variables récupèrent les valeurs que tu souhaites grâce à ces 2 instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Qdf.Parameters("année") = Forms!Welcome.Form!cboannee   '<== si requête paramétrée
    Qdf.Parameters("mois") = Forms!Welcome.Form![mois]
    Je te fais remplacer [Année] et [Mois] par Qdf.Parameters("année") et Qdf.Parameters("mois") dans le Tdf.SQL (le script de ta requête avant changement) car elles contiennent les valeurs et non plus les parmêtres. C'est ce que je t'explique ici :
    Le Replace va remplacer les paramètres par des constantes dans la requête, exemple, si tu as saisi 2012 pour l'année et 11 pour le mois, tu auras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Month(DateSerial(2012,11,TJours.jour))=11)
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Month(DateSerial([Année],[Mois],TJours.jour))=[Mois])
    Je pense que tu n'as pas enlevé l'instruction PARAMETERS dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS Année Short, Mois Short;
    le Replace a fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS 2012 Short, 11 Short;
    ce qui explique ton souci.

  12. #12
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Par défaut
    mercii j'ai compris (enfin )
    non non j'ai bien enlevé le parameters ça ne vient pas de là humm
    Une autre idée?

Discussions similaires

  1. Requête paramétrée en VBA et erreur 91
    Par sardaucar dans le forum VBA Access
    Réponses: 16
    Dernier message: 30/10/2014, 17h44
  2. [AC-2010] Requête paramétrée en vba
    Par frannzz dans le forum VBA Access
    Réponses: 5
    Dernier message: 31/08/2012, 15h54
  3. Requête paramétrée depuis VBA
    Par efvsql dans le forum Microsoft BI
    Réponses: 0
    Dernier message: 25/08/2008, 20h24
  4. [code VBA]passage de variable pour une requête paramétrée
    Par christrabin dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/04/2007, 14h30
  5. VBA & Requête paramétrée
    Par gripoil dans le forum Access
    Réponses: 4
    Dernier message: 25/11/2004, 09h54

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