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

IHM Discussion :

Tableau croise dynamique parametrable


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 9
    Points
    9
    Par défaut Tableau croise dynamique parametrable
    Bonjour,

    J'ai quelques difficultes sur un projet sur lequel j'utilise la derniere version d'access. J'espere que quelqu'un pourra m'aider.

    Tout d'abord, je souhaite realiser l'affichage d'une timesheet par utilisateur par semaine. Pour cela j'ai tout d'abord cree une requete selectionnant les informations a afficher que j'ai ensuite affiche dans un formulaire sous la dorme d'un tableau croise dynamique.

    J'ai ensuite mis ce premier formulaire dans un second (maitre) qui permet de ne selectionner qu'un utilisateur. A ce moment, j'arrive a afficher mon tableau avec les bonnes informations pour le bon utilisateur. Il faut maintenant que je n'affiche le resultat que pour une periode donnee.

    J'ai un menu permettant de circuler dans les semaines (periode choisie) et chaque fois je calcule le premier et le dernier jour a afficher. Il faut donc que j'utilise ces deux valeurs pour filtrer ma requete ("WHERE Date BETWEEN Date1 AND Date2;") seulement je ne m'en sors pas.

    J'ai essaye de faire une requete parametrable ("PARAMETERS Date1 DateTime, Date2 DateTime;") puis d'utiliser les parametres dans mon code vba

    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
     
    Public Function CrossTable()
     
    On Error GoTo err
    Dim Db As DAO.Database
    Dim QryModele As DAO.QueryDef
    Dim strSQLModele As String
    Dim strNomQueryModele As String
    Dim strNomQuery As String
     
    strNomQueryModele = "qryCrossTable_modele"
    strNomQuery = "qryCrossTable"
    Set Db = CurrentDb
    Set QryModele = Db.QueryDefs(strNomQueryModele)
    strSQLModele = QryModele.SQL
     
    'Effectue le remplacement du critere par la valeur
    strSQLModele = Replace(strSQLModele, "[Date1]", Format(DDate1, "mm/dd/yyyy"))
    strSQLModele = Replace(strSQLModele, "[Date2]", Format(DDate2, "mm/dd/yyyy"))
     
    'Si la requête existe déjà alors
    If TestExistenceQuery(strNomQuery) Then
      'alors modifier le code de la requête
      Db.QueryDefs(strNomQuery).SQL = strSQLModele
    'Sinon
    Else
      'Créer la nouvelle requête
      Db.CreateQueryDef strNomQuery, strSQLModele
    End If
    DoCmd.OpenQuery strNomQuery
     
     
    err:
    MsgBox "Une erreur est survenue", vbCritical
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Public Function TestExistenceQuery(strNameQuery As String) As Boolean
     
    On Error GoTo err
    Dim strNameRequete As String
    Dim Db As DAO.Database
    Dim QryTest As DAO.QueryDef
    Set Db = CurrentDb
    Set QryTest = Db.QueryDefs(strNameRequete)
    TestExistenceQuery = True
    err:
     
    End Function
    J'ai une erreure quelque part mais je ne la comprends pas. Le code est tres grandement inspire d'ici : http://warin.developpez.com/access/requeteparametre/

    Donc mes questions : est-ce que ma demarche est bonne?
    Ensuite, qu'est-ce qui ne va pas dans mon code?

    Merci d'avance pour votre aide,

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    une piste dans le tutoriel:

    - Le champ est une date :

    Access stocke les dates au format américain (mm/dd/yyyy) et les dates sont à encadrer par des #.

    Exemple :

    SELECT * FROM Clients
    WHERE DateNaissance=#10/22/1976#

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Bonsoir et merci pour cette reponse.

    Il manquait effectivement les "#" dans mon code SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS Date1 DateTime, Date2 DateTime;
    SELECT USERS.FirstName, USERS.UserID, TASKS.Duration, TASKS.Office, TASKS.Date, TASKTYPE.Description, PROJECT.ProjectNumber, PROJECT.ProjectDescription
    FROM USERS, TASKS, PROJECT, TASKTYPE
    WHERE TASKS.Date Between #Date1# And #Date2#;
    J'ai maintenant une erreur : "Syntax error in date in query expression 'TASKS.Date Between #Date1# And #Date2#'. Celle ci m'empeche d'ouvrir le sous formulaire contenant le tableau croise.

    Une idee?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    bonjour,

    pas comme ça, la syntaxe de la requête paramétrée était bonne:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE TASKS.Date Between [Date1] And [Date2];

    c'est dans le code VBA qu'il faut rajouter les # quand tu remplaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSQLModele = Replace(strSQLModele, "[Date1]", "#" & Format(DDate1, "mm/dd/yyyy") & "#")
    strSQLModele = Replace(strSQLModele, "[Date2]", "#" & Format(DDate2, "mm/dd/yyyy") & "#")


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM USERS, TASKS, PROJECT, TASKTYPE
    tu es sûr de ta requête paramétrée ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Encore merci!

    J'ai corrige et ca va beaucoup mieux. En effet, mon code SQL n'allait pas du tout. J'ai rectifie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT USERS.FirstName, USERS.LastName, TASKS.Date, TASKS.Office, TASKS.Duration, TASKTYPE.Description, PROJECT.ProjectNumber, PROJECT.ProjectDescription
    FROM USERS INNER JOIN (TASKTYPE INNER JOIN (PROJECT INNER JOIN TASKS ON PROJECT.ProjectID = TASKS.ProjectID) ON TASKTYPE.TaskTypeID = TASKS.TaskTypeID) ON USERS.UserID = TASKS.UserID
    WHERE TASKS.Date Between [Date1] And [Date2];
    J'ai enleve la premiere partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS Date1 DateTime, Date2 DateTime;
    En effet la fonction vba remplacant [Date1] et [Date2] directement dans le code SQL ce n'etait plus necessaire.

    La fonction vba corrigee :
    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
    Public Function CrossTable()
     
    On Error GoTo err
    Dim Db As DAO.Database
    Dim QryModele As DAO.QueryDef
    Dim strSQLModele As String
    Dim strNomQueryModele As String
    Dim strNomQuery As String
     
    strNomQueryModele = "qryCrossTable_modele"
    strNomQuery = "qryCrossTable"
    Set Db = CurrentDb
    Set QryModele = Db.QueryDefs(strNomQueryModele)
    strSQLModele = QryModele.SQL
     
    strSQLModele = Replace(strSQLModele, "[Date1]", "#" & Format(DDate1, "mm/dd/yyyy") & "#")
    strSQLModele = Replace(strSQLModele, "[Date2]", "#" & Format(DDate2, "mm/dd/yyyy") & "#")
     
    'Si la requête existe déjà alors
    If TestExistenceQuery(strNomQuery) Then
      'alors modifier le code de la requête
      Db.QueryDefs(strNomQuery).SQL = strSQLModele
    'Sinon
    Else
      'Créer la nouvelle requête
      Db.CreateQueryDef strNomQuery, strSQLModele
    End If
     
    err:
    MsgBox "Une erreur est survenue", vbCritical
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function TestExistenceQuery(strNameQuery As String) As Boolean
     
    On Error GoTo err
    Dim Db As DAO.Database
    Dim QryTest As DAO.QueryDef
    Set Db = CurrentDb
    Set QryTest = Db.QueryDefs(strNameQuery)
    TestExistenceQuery = True
    err:
     
    End Function
    Par contre, l'execution de cette fonction ne met pas a jour le tableau croise. Je travaille la dessus.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Ma requete s'execute correctement mais n'est pas appliquee sur le tableau croise du mon sous formulaire.

    La requete permet de filtrer les donnees "dynamiquement" qui sont utilisees dans un tableau croise lui meme dans un sous formulaire. Lorsque je genere une nouvelle requete depuis mon formulaire, le sous formulaire ne rafraichit pas sa source et je dois reconaitre que je seche.

    J'ai essaye sans succes d'utiliser cette construction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("formulaire").Controls("sous-formulaire").Form.Requery
    mais ca ne change rien.

    Une idee?

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

Discussions similaires

  1. [VBA-E] Tableau Croise Dynamique données dans table access
    Par winner103 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/11/2006, 11h49
  2. Tableau Croisé Dynamique
    Par n@n¤u dans le forum Struts 1
    Réponses: 4
    Dernier message: 04/07/2006, 08h12
  3. Encore Tableau Croisé Dynamique
    Par Old_Chap dans le forum Access
    Réponses: 2
    Dernier message: 28/06/2006, 10h35
  4. tableau croisée dynamique
    Par el_quincho dans le forum Access
    Réponses: 1
    Dernier message: 22/02/2006, 12h05
  5. Réponses: 4
    Dernier message: 07/02/2006, 19h25

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