Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/09/2011, 18h35   #1
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Par défaut Etat automatique d'une requête analyse croisée

Bonjour,

je veux créer un état (d'une requête analyse croisée) dynamique qui se mette à jour automatiquement.

La requête forme un tableau de polyvalence qui permet de savoir qui est habilité à quoi.


Je peux donc avoir de nouvelles habilitations, modifier le titre d'habilitation et en enlever. Cela modifie donc le nombre de colonne et le titre des étiquettes ainsi que le nom des champs de l'état.


J'ai beau me battre avec Access , je ne vois pas comment faire.

J'ai joint ma base avec l'exemple de l'état que je veux réaliser. Il se trouve dans l'onglet "Liste_Grille" "Grille polyvalence" (état "Grille polyvalence).
Merci de votre aide
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 18h40   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

Peut-être dans les sources Access:
Création d'un état basé sur une requête analyse croisée
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 19h52   #3
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
, je vais étudier cette source et l'essayer.

Je reviendrai pour dire où j'en suis.

Merci.
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 22h11   #4
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Bonjour,

pour le moment, je n'arrive pas à faire correspondre cette macro à Access 2010

A suivre
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 12h12   #5
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Bonjour,

j'ai testé le code ci-dessous :

Code :
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
141
142
143
144
145
146
147
148
149
Option Compare Database
' ***** déclaration 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 Report_Open(Annuler As Integer)
 
    Dim rstRequete As DAO.QueryDef
 
    Set dbBase = CurrentDb
    Set rstRequete = dbBase.QueryDefs("AnalyseCroisee")
    Set rstEnregistrement = rstRequete.OpenRecordset()
 
    'Définit le nombre de colonnes de la requête
    NbColonnes = rstRequete.Fields.Count
 
End Sub
 
 
Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer)
 
    rstEnregistrement.MoveFirst
    Initvar
 
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 ZoneEntêtePage_Format(Annuler As Integer, FormatCount As Integer)
' Pour les versions 2002 à 2010 : remplacer EntêtePage_Format par Zone EntêtePage_Format.
 
    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)) = rstEnregistrement(entX - 1).Name
    Next entX
 
    ' Crée l'entête Totaux de la prochaine zone de liste disponible.
    Me("Entete" + Format(NbColonnes + 1)) = "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 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 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_état
 
    ' 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 Détail_Retreat()
 
    rstEnregistrement.MovePrevious
 
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_état = Total_état + Nblignes
    End If
 
End Sub
 
 
Private Sub Report_Close()
 
    rstEnregistrement.Close
 
End Sub
et j'ai mis en place mon modèle d'état suivant les instructions de la source access.

Pour comprendre la macro, j'ai mis des points d'arrêt à chaque "Private" et des espions pour chaques données pour savoir quelle macro s'enclenche et modifier les paramètre qui pourrait être nécessaire pour aboutir à ma finition.
J'ai aussi récupéré le déroulement des évènements pour les sections d'états.
Donc dans l'ordre :
"1 Open (état) 2 Activate (état) 3 Format (section d’état) 4 Print (section d’état) 5 Close (état) 6 Deactivate (état)
De plus, les événements suivants peuvent survenir pendant ou après le formatage, mais avant l’événement Print :
• L’événement 3.1 Retreat se produit lorsqu’Access retourne à une section précédente lors du formatage d’un état.
• L’événement 3.2 NoData se produit si aucun enregistrement n’est affiché par l’état.
• L’événement 3.3 Page se produit après le formatage, mais avant l’impression. Cet événement peut être utilisé pour personnaliser l’apparence de l’état imprimé.
"

Maintenant quand j'ouvre l'état, la macro _Open se lance et se déroule normalement. Ensuite les macros _Format devraient se lancer mais ne démarre pas. Ce qui fait que mon état s'affiche avec les cases vides.

J'ai regardé dans les événements de l'état et Access a rempli seul les lignes ci-dessous :


Si quelqu'un a une idée parce que là je sèche.

je joins ma dernière version de base macro compris.
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h08   #6
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Bonjour,

pour faire fonctionner les macro _Format, il faut mettre dans la propriété de l'état dans "format" le paramètre affichage par défaut sur "Aperçu avant impression".

Maintenant que les macros s'enclenche, j'ai une erreur comme cela


où l'objet : Me("Entete" + Format(entX)). En ce qui concerne rstEnregistrement(entX - 1).Name il me ramène bien ma valeur.

Je ne sais pas comment modifier : Me("Entete" + Format(entX)) pour supprimer l'erreur.
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 19h15   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

normal, tes entete1, entete2, etc... ne sont pas des zones de texte comme dans le tutoriel mais des étiquettes dont les noms sont "Etiquettexx".

Au niveau de la syntaxe, j'ai plus l'habitude avec:
Code :
Me.Controls("Entete" + Format(entX)).value = rstEnregistrement(entX - 1).Name
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 10h55   #8
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Bonjour,

Me.Controls ne permet pas non plus d’accéder à l'objet "étiquette" donc je vais reprendre mon modèle d'état pour remplacer les "étiquette" par des "zone texte".

A suivre.
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 11h29   #9
Invité de passage
 
Inscription : février 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 17
Points : 4
Points : 4
Bonjour,

cela fonctionne en mode aperçu. Maintenant, je cherche à le faire fonctionner en mode état. Il doit falloir remplacer les macros de type _Format par .

A suivre.
benoit-ema est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h32.


 
 
 
 
Partenaires

Hébergement Web