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

Requêtes et SQL. Discussion :

Analyse croisée paramétrée - Fonctionne via l'interface mais pas via le vba [AC-2007]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut Analyse croisée paramétrée - Fonctionne via l'interface mais pas via le vba
    Bonsoir,

    J'ai beau chercher, je ne trouve pas de réponse à ma question donc je fini par poster ici !
    En espérant qu'une autre personne n'ai pas déjà posté un message similaire, si c'est le cas je vous prie de m'en excuser...

    Je poste ici en espérant être au bon endroit (le problème se situe au niveau VBA (pas d'erreur à la compilation) mais concerne une requête SQL)...


    Tout d'abord j'ai essayé de faire une requête d'analyse croisée paramétrée, à la construction de celle-ci je suis tombé sur la fameuse erreur me disant gentiment que les paramètres ne peuvent pas être définis par des variables...

    Je suis donc passé par ici (au passage c'est un très bel article, simple clair et efficace), n'ayant pas d'allergies j'ai préféré la solution via le VBA.

    La requête via l'interface d'Access fonctionne sans soucis (en écrivant mon paramètre manuellement dans la fenêtre du mode création).
    Version graphique :
    Nom : Capture.JPG
Affichages : 570
Taille : 78,6 Ko

    Code SQL : 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
    TRANSFORM Count(tblPrestation.id_prestation) AS CompteDeid_prestation
    SELECT tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal
    FROM tblTypeAnimal 
    	INNER JOIN ((tblRace INNER JOIN tblAnimal 
    		ON (tblRace.id_race=tblAnimal.id_race) 
    			AND (tblRace.id_type_animal=tblAnimal.id_type_animal)) 
    		INNER JOIN tblPrestation 
    			ON (tblAnimal.id_animal=tblPrestation.id_animal) 
    				AND (tblAnimal.id_race=tblPrestation.id_race) 
    				AND (tblAnimal.id_type_animal=tblPrestation.id_type_animal) 
    				AND (tblAnimal.id_client=tblPrestation.id_client)) 
    	ON tblTypeAnimal.id_type_animal=tblRace.id_type_animal
    WHERE ((tblPrestation.id_client)=1)
    GROUP BY tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal
    ORDER BY Year([date_prestation]) DESC 
    PIVOT Year([date_prestation]);
    Nom : Capture3.JPG
Affichages : 399
Taille : 47,4 Ko
    Le résultat obtenu :
    Nom : Capture2.JPG
Affichages : 426
Taille : 18,9 Ko
    Mais une fois ajoutée dans du vba la syntaxe de la requête est comme mauvaise, voici le message :
    Nom : Capture.JPG
Affichages : 391
Taille : 19,5 Ko

    J'ai modifié un peu le code du tuto pour simplifier les choses et surtout pour ne plus supprimer ma requête sans jamais pouvoir la recréer via VBA...
    Donc au niveau de mon code j'en suis ici :
    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
        CurrentDb.QueryDefs("qryFrequAnnuelleClient").SQL = _
            "TRANSFORM Count(tblPrestation.id_prestation) AS Frequence" & _
            "SELECT tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal" & _
            "FROM tblTypeAnimal " & _
                "INNER JOIN ((tblRace INNER JOIN tblAnimal " & _
                    "ON (tblRace.id_race = tblAnimal.id_race) " & _
                        "AND (tblRace.id_type_animal = tblAnimal.id_type_animal)) " & _
                        "INNER JOIN tblPrestation " & _
                            "ON (tblAnimal.id_animal = tblPrestation.id_animal) " & _
                                "AND (tblAnimal.id_race = tblPrestation.id_race) " & _
                                "AND (tblAnimal.id_type_animal = tblPrestation.id_type_animal) " & _
                                "AND (tblAnimal.id_client = tblPrestation.id_client)) " & _
                "ON tblTypeAnimal.id_type_animal = tblRace.id_type_animal" & _
            "WHERE (((tblPrestation.id_client) = 1))" & _
            "GROUP BY tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal" & _
            "ORDER BY Year([date_prestation]) DESC" & _
            "PIVOT Year([date_prestation]);"
        DoCmd.OpenQuery "qryFrequAnnuelleClient"
    Pour le paramètre, je l'ai volontairement écrit en dur pour être sur que ça ne venait pas d'une erreur de syntaxe dans mon code...
    Je sais où l'ajouter ce n'est pas le soucis mais je bute sur le pourquoi cette erreur apparait alors que la requête semble correcte (et surtout qu'il l'accepte via le menu de paramétrage de la requête)...

    Merci par avance à ceux qui arriveront à voir où est mon erreur

  2. #2
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Re-bonsoir,

    Excusez moi du double post, je l'ai fait pour que les personnes ayant déjà lu mon premier post voient que le sujet a avancé...

    J'ai trouvé une solution très simple à mon problème (sans forcément passer par le tuto ^^).
    Cette discussion pourrait être déplacé dans les contributions si vous estimez que ça peut être utile à d'autres !

    En fait, dans l'interface il y a la possibilité de rajouter des paramètres (choses que je n'avais jamais vu auparavant) comme le témoigne le cadre rouge ici :
    Nom : Sans titre.png
Affichages : 371
Taille : 90,4 Ko

    Ensuite il peut tout simplement être ajouté une liaison vers un formulaire ou autre chose si on le désire...
    Nom : Capture.JPG
Affichages : 384
Taille : 40,1 Ko

    Puis dans le formulaire "frmClient" appelant l'ouverture de la requête j'ai simplement ajouté sur click d'un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenQuery "qryFrequAnnuelleClient"
    Et voilà sur click d'un bouton je récupère le résultat de ma requête (ici filtrée pour le client en question).

    Cependant quand j'ai quelque chose supposé fonctionner mais qui ne fonctionne pas, j'aime comprendre ce qu'il ne va pas dans ce que j'ai fait (c'est comme ça que je progresse)...
    Donc si quelqu'un voit ce qui ne va pas dans mon problème d'origine, merci de m'indiquer où est mon erreur

    [EDIT 16/10/16 06:10] Et si vous voulez y accéder dans un recordset en vba (ici le paramètre a été renommé en "client"):
    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
        Dim db As Database
        Dim qry As QueryDef
        Dim qryResult As Recordset
     
        Set db = CurrentDb()
        Set qry = db.QueryDefs("qryFrequAnnuelleClient")
     
        qry.Parameters("client") = Me.txtIDClient
        Set qryResult = qry.OpenRecordset
        'Utilisation du résultat de la requête
        qry.Close
        Set qry = Nothing
        qryResult.Close
        Set qryResult = Nothing
        db.Close
        Set db = Nothing

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    tu as oublie de mettre un espace entre chacune de tes lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "TRANSFORM Count(tblPrestation.id_prestation) AS Frequence" & _
            "SELECT tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal" & _
    aurait du avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "TRANSFORM Count(tblPrestation.id_prestation) AS Frequence" & _
            " SELECT tblTypeAnimal.nom_type, tblRace.nom_race, tblAnimal.nom_animal" & _
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour !


    Quel boulet je fais... Évidemment ça marche moins bien

    Je me doutais d'un problème de syntaxe mais je cherchais un problème de requête en elle même et non un problème lié à la concaténation dans le vba...
    Merci beaucoup, je suis pas prêt de me faire avoir la prochaine fois

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

Discussions similaires

  1. Requête analyse croisée paramétrée
    Par Chippen dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/02/2008, 15h14
  2. Réponses: 7
    Dernier message: 19/02/2008, 15h30
  3. Requête analyse croisée+paramètres
    Par tcorcy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/05/2007, 17h51
  4. pb tutoriel "requête analyse croisée paramétrées"
    Par karidrou dans le forum Access
    Réponses: 6
    Dernier message: 23/03/2006, 11h21
  5. Réponses: 9
    Dernier message: 08/03/2006, 12h27

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