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 :

Faire un état à partir d'une requête analyse croisée


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Points : 32
    Points
    32
    Par défaut [Resolu]Faire un état à partir d'une requête analyse croisée
    Bonjour,

    Je possède une table tblRegistre. Cette table est composant de plusieurs champs mais voici ceux qui m'intéressent pour ma question :

    - Date
    - NoEmploye
    - NbrItems
    - TempsItems

    La table permet de faire la saisie de la journée de travail des employés. Pour chaque enregistrement, on sait que pour une journée et un numéro d'employé (clé primaire), on connait le nombre d'items que le l'employé à traité dans sa journée. De plus, on connait le temps en minutes qui a été alloué pour traiter les items.

    Je dois donc créer un état qui prendra la forme d'un tableau. À chq semaine, le gestionnaire produira le rapport hebdomadaire qui permettera d'afficher le tableau qui listera le résumé de la semaine des employés.

    Le tableau aura comme en-tête de lignes la liste des employés et les colonnes porteront sur les dates. Je dois donc utiliser une requête analyse croisée pour remplir le tableau dans l'état.

    Voici le problème : J'ai une requête analyse croisée qui me donne exactement le résultat que je veux obtenir. Mais comment puis-je remplir le tableau dans l'état? Étant donné que les entêtes de colonnes (les dates) changeront à chaque fois que je vais imprimer le rapport, comment puis-je remplir le rapport à chq fois puisque les noms de champs de la requête analyse croisée ne porteront jamais le même noms?

    Merci de votre aide.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Après avoir effectué des recherches supplémentaires, je n'ai pas encore trouvé de solution. Est-ce que vous pouvez m'aider ?

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    J'ai une solution mais pas avant demain car il est tard en France. Question cruciale : est-ce que ton analyse croisée te renvoie un nombre de colonnes variables ou fixe ? (tu parles de relevé hebdomadaire, est-ce que tu affiches toujours 7 colonnes ?)
    Car si c'est fixe, tu es peut-être sauvé sinon : impossible.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Points : 32
    Points
    32
    Par défaut RE :
    Salut,

    Oui , pour l'instant je te confirme que le nombre de colonne sera fixe. En fait, il y aura 8 colonnes (du lundi au dimanche + 1 colonne de total) .

    Par contre, j'ai un problème assez grave. Mis à part les changements de noms de champs des colonnes de la requête (les dates qui évoluent au fil du temps), je n'ai pas pensé que dans une analyse croisée, il ne peut y avoir qu'un seul champs valeur. Donc, si je veux afficher dans mon tableau le nombre d'items et le temps de traitement pour un employé à une date donnée, qu'est-ce que je fais.

    J'ai hâte d'Avoir plus de détails sur ta solution!

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 817
    Points : 14 911
    Points
    14 911
    Par défaut
    Salut mathias !
    sympa d'avoir répondu, mais j'étais pratiquement sur de ta réponse 8) .Par contre, j'aimerais que tu m'en dises plus au sujet du problème de tes valeurs multiples : peux-tu faire un copier/coller de ta requête et un bout du résultat ?
    Merci.
    En attendant, voici l'astuce : Dans ton état tu crées 7 champs indépendants (Zones de texte) nommés Ch0, Ch1, Ch2, ..., Ch6, puis 7 étiquettes (Labels) nommés Et0, Et1, Et2, ..., Et6.
    Le champ total peut être fixe et aura comme source controle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =nz([Ch1];0)+nz([Ch2];0)+nz([Ch3];0)+nz([Ch4];0)+nz([Ch5];0)+nz([Ch6];0)
    La fonction Nz est très importante car les requètes d'analyse croisée renvoient souvent du Null.
    Ensuite, le principe est de renseigner le source controle de ces champs et de leurs titres en parcourant la collection controls de ta requète et en y accédant, non pas par son index mais par son nom. Comment ? en tapant le code suivant à l'ouverture de l'état :
    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
    Private Sub Report_Open(Cancel As Integer)
    Dim rs As Recordset
    Dim i As Integer    ' compteur des controles de l'état
    Dim j As Integer    ' compteur des champs du recordset
     
    Set rs = CurrentDb.OpenRecordset("Qry3")
     
    If Not rs.BOF And Not rs.EOF Then
            rs.MoveFirst
            For j = 0 To rs.Fields.Count - 1
     
                For i = 0 To Me.Controls.Count - 1
                   ' Colonnes
                    If Me.Controls(i).ControlType = acTextBox Then
                        Me.Controls("Ch" & j).ControlSource = rs.Fields(j).Name
                    End If
                   ' Titre des colonnes
                    If Me.Controls(i).ControlType = acLabel Then
                        Me.Controls("Et" & j).Caption = rs.Fields(j).Name
                    End If
     
                Next i
     
            Next j
     
    End If
     
    rs.Close
    Set rs = Nothing
     
    End Sub
    Il ne te reste plus qu'a remplacer Qry3 par le nom de ta requète et tester.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Points : 32
    Points
    32
    Par défaut RE :
    Salut,

    Effectivement, je crois qu'il s'agit d'une bonne astuce. Malheureusement, je me suis rendu compte que mon rapport ne contiendra pas toujours des données pour une journée donné (ex: lors de jours de congé). Ton code fonctionne à la condition qu'il y ait toujours des données pour chaque jour de la semaine. Comme ce ne sera pas toujours le cas, je devrai penser à une autre astuce.

    Mais ne t'en fait pas, ton exemple de code m'a donné une idée pour m'en sortir. Je vais devoir définir une source de donnée à chacun des mes champs jour. Pour chaque jour, je devrai vérifier si des données existent. Lorsqu'il y en aura, je vais mettre le nom du champs à afficher dans le contrôle source. Lorsqu'il n'y aura pas de données pour la journée, je ne metterai pas de source de donné au champs. Qu'en penses-tu ?

    Merci pour ton aide.

  7. #7
    Membre du Club

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 65
    Points
    65
    Par défaut Anal croisée --> Etat
    Bonjour.

    J'utilise une table de translation qui permet de faire ce qu'on veut :

    que ce soit en douze mois glissant :
    200312 M01
    200401 M02
    200403 M03

    etc...
    une petite procédure pour shifter les mois aaaamm une fois par mois et hop la requete analyse croisée retourne M01 M02 M03 etc
    dans l'état, pour avoir le vrai mois, faire un sous état appelant une analyse croisée (qui ne donnera qu'une ligne) donnant les valeurs 200312 etc

    ca marche pour un tas de chose en analyse croisée : une table de correspondance afin de maitriser les en tetes de colonnes.

    Cela offre la souplesse d'une table.

    Idem pour des critères de classement genre Distribution Gaussienne...

    Bonne nav.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut
    Bonjour,

    Je déterre ce post qui m'a permis de créer facilement un état à partir d'une requête analyse croisée.

    Je souhaite, dans le pied d'état, faire la somme de chaque colonne (champs [Ch3] à [Ch10]). Lorsque dans un champ indépendant placé dans le pied d'état je mets :
    cela ne fonctionne pas.

    Comment faire.

    Jean-Pierre

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/09/2012, 12h02
  2. [AC-2003] Créer une table à partir d'une requête Analyse croisée
    Par FouJP dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/05/2012, 11h46
  3. Réponses: 5
    Dernier message: 10/08/2011, 11h45
  4. [AC-2000] Formulaire et état basés sur une requête analyse croisée
    Par ClaudeLELOUP dans le forum IHM
    Réponses: 4
    Dernier message: 23/02/2011, 13h58
  5. [AC-2000] Créer une table à partir d'une requête Analyse croisée
    Par Yokosuma dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/06/2009, 15h32

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