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 :

[A-02] Etat basé sur Requête croisée, problème de code


Sujet :

IHM

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [A-02] Etat basé sur Requête croisée, problème de code
    Bonjour

    Avant de poster, j'ai cherché sur ce site et sur google la solution à mon problème, excusez moi si elle existe et que je ne l'ai pas trouvée.

    J'ai créé une Requête croisée pour avoir des totaux par mois pour certaines données. Ma requête croisée va donc évoluer de mois en mois et alimente deux sous états, l'un pour avoir une courbe, l'autre pour l'affichage des données en tableau.

    Je préfèrerais ne pas avoir à modifier mes états tous les mois pour avoir un mois supplémentaire.

    J'ai donc trouvé sur ce site un code excellent que je remet ici pour que mon état tableau s'adapte à la Requête croisée.

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    Option Compare Database
    Option Explicit
     
    '****** Declaration des variables *********
    Const Nombre_colonnes = 13 ' Nombre maximum d'étiquettes sur l'état (par rapport à l'exemple) & _
        on peut en afficher plus et donc modifier cette variable
    Dim dbBase As DAO.Database
    Dim rstEnregistrement As DAO.Recordset
    Dim Nbcolonnes As Integer
    Dim Total_colonnes(1 To Nombre_colonnes) As Long
    Dim Total_etat As Long
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        Dim entX As Integer
     
        If Not rstEnregistrement.EOF Then
            If Me.FormatCount = 1 Then
                For entX = 1 To Nbcolonnes
                Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)
                Next entX
     
                For entX = Nbcolonnes + 2 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
     
                rstEnregistrement.MoveNext
            End If
        End If
     
    End Sub
     
     
     
    Private Sub Report_Open(Annuler As Integer)
     
        Dim rstRequete As DAO.QueryDef
     
        Set dbBase = CurrentDb
        Set rstRequete = dbBase.QueryDefs("RC_QC_CUMUL_SERV")
        Set rstEnregistrement = rstRequete.OpenRecordset()
     
        'Définit le nombre de colonnes de la requête
        Nbcolonnes = rstRequete.Fields.Count
     
    End Sub
     
    Private Sub EntêteEtat_Format(Annuler As Integer, FormatCount As Integer)
    ' Pour la version 2002 : remplacer EntêtePage_Format par Zone EntêtePage_Format. A voir pour les autres versions
     
        Dim entX As Integer
     
        ' Met les entêtes de colonnes dans des zones de texte dans la section Entête.
          For entX = 1 To Nbcolonnes
            Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name
          Next entX
     
    'Crée l'entête Totaux de la prochaine zone de liste disponible
    Me("Entete" + Format(entX)) = "Totaux"
     
     
        ' Cache les zones de texte inutilisées dans la section Entête.
        For entX = (Nbcolonnes + 2) To Nombre_colonnes
            Me("Entete" + Format(entX)).Visible = False
     
        Next entX
     
    End Sub
     
    Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer)
     
        Dim entX As Integer
     
        ' Affecte la valeur Total_Colonne(entX) des champs en colonne au champs total
        For entX = 2 To Nbcolonnes
        Me("Total" + Format(entX)) = Total_colonnes(entX)
        Next entX
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état.
        Me("Total" + Format(Nbcolonnes + 1)) = Total_etat
     
        ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (Nbcolonnes + 2) To Nombre_colonnes
            Me("Total" + Format(entX)).Visible = False
        Next entX
     
    End Sub
     
     
    Private Sub Report_NoData(Annuler As Integer)
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation, "Information"
        rstEnregistrement.Close
        Annuler = True
     
    End Sub
     
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
     
        Dim entX As Integer
        Dim Nblignes As Long
     
        If Me.PrintCount = 1 Then
            Nblignes = 0
     
            For entX = 2 To Nbcolonnes
                Nblignes = Nblignes + Me("Detail" + Format(entX))
               Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX))
            Next entX
     
            Me("Detail" + Format(Nbcolonnes + 1)) = Nblignes
            Total_etat = Total_etat + Nblignes
        End If
     
    End Sub
     
    Private Sub Détail_Retreat()
     
        rstEnregistrement.MovePrevious
     
    End Sub
     
    Private Sub Initvar()
     
        Dim entX As Integer
        Total_etat = 0
     
        For entX = 1 To Nbcolonnes
           Total_colonnes(entX) = 0
        Next entX
     
    End Sub
     
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
     
        rstEnregistrement.MoveFirst
        Initvar
     
    End Sub

    Pourtant, 2 problèmes subsistent à l'affichage de l'état : les entêtes ne s'affichent pas, et la colonne de droite correspond au cumul des autres, et je n'ai pas besoin de total par ligne.

    Si vous pouviez me dire à quel endroit je dois modifier ce code pour répondre à mes besoins, merci d'avance.

    Cordialement

    Pamynx75

    Tous les jours meilleur pour être simplement bon

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    pour la colonne totale de droite, je dirai qu'il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Const Nombre_colonnes = 12 'et non pas 13
     
    'et supprimer dans enTete_Format la ligne suivante
    'Crée l'entête Totaux de la prochaine zone de liste disponible
    Me("Entete" + Format(entX)) = "Totaux"

    pour les entête qui ne s'affichent pas, il me semble qu'il y a une erreur de frappe dans EntêteEtat_Format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ' Met les entêtes de colonnes dans des zones de texte dans la section Entête.
          For entX = 1 To Nbcolonnes
         '===> ICI
            Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name
           'ce n'est pas plutôt rstEnregistrement(entX - 1).name ???
          Next entX
    Il y a quelque chose que je ne comprends pas : il semble que tu ai 2 fois la procédure EntêteEtat_Format.... C'est normal ???

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut j'en ai trouvé un sur deux
    Bonjour

    Merci de votre réponse et de votre aide.

    En continuant à tatonner, j'ai trouvé comment supprimer la colonne totaux de droite, il faut remplacer 2 par 1 dans les procédures suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Dans PiedÉtat_Format :
    ' Cache les zones de texte inutilisées dans le pied d'état.
        For entX = (Nbcolonnes + 2) To Nombre_colonnes
    Il faut remplacer le 2 par 1
            Me("Total" + Format(entX)).Visible = False
        Next entX
    Idem dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Détail_Format :
    For entX = Nbcolonnes + 1 To Nombre_colonnes
                    Me("Detail" + Format(entX)).Visible = False
                Next entX
    Car même quand je supprime dans Entete_Format, la colonne s'affiche toujours


    J'ai également modifié la zone EnteteEtatFormat comme vous me le conseillez, mais la ligne de titre ne s'affiche toujours pas.


    Citation Envoyé par Taoueret Voir le message
    pour la colonne totale de droite, je dirai qu'il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Const Nombre_colonnes = 12 'et non pas 13
     
    'et supprimer dans enTete_Format la ligne suivante
    'Crée l'entête Totaux de la prochaine zone de liste disponible
    Me("Entete" + Format(entX)) = "Totaux"

    pour les entête qui ne s'affichent pas, il me semble qu'il y a une erreur de frappe dans EntêteEtat_Format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ' Met les entêtes de colonnes dans des zones de texte dans la section Entête.
          For entX = 1 To Nbcolonnes
         '===> ICI
            Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name
           'ce n'est pas plutôt rstEnregistrement(entX - 1).name ???
          Next entX
    Il y a quelque chose que je ne comprends pas : il semble que tu ai 2 fois la procédure EntêteEtat_Format.... C'est normal ???
    Concernant les 2 fois de la procédure EntêteEtat_Format, je ne sais pas, comme je l'ai dit j'ai recopié un code trouvé sur ce site, j'ai donc masqué la procédure Initvar et la deuxième entrée concernant EntêteEtat_Format, et je ne vois pas de modifications à l'écran.

    Je continue mes investigations, et si vous avez d'autres idées, je suis preneur.

    D'avance merci

    Cordialement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/01/2009, 17h50
  2. etat basé sur requete croisée
    Par eyhandé dans le forum IHM
    Réponses: 2
    Dernier message: 05/06/2008, 10h40
  3. Réponses: 2
    Dernier message: 07/10/2007, 16h59
  4. Etat basé sur une Requete Analyse Croisée
    Par Bercud dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/06/2006, 16h03
  5. Etat basé sur requête à champs variables
    Par hmonnet dans le forum Access
    Réponses: 2
    Dernier message: 10/11/2005, 08h19

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