[Access][ETAT] num page par groupe

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

27 juin 2005, 14:18

Contexte :
J'édite un rapport d'activité pour tous les unités (~100) de ma société.
Chaque unité se voit consacrer de 1 à 3 pages de rapport (soit 153 pages en tout)
Logiquement je groupe mon rapport sur le numéro d'unité avec un saut de page avant le début du groupe *unité* et l'option "répeter section" à oui
Chaque unité recevra les pages du rapport qui lui sont consacrées

Base du probleme :
J'affiche en bas de page le numéro de la page et le nombre total de page, ce qui peut donner "Page 43/153" hors le groupe représenté sur la page 43, ne prend en réalité qu'une seule page. Je souhaite donc afficher "Page 1/1"

Début de solution : (Source : http://www.mvps.org/accessfr/reports/rpt0013.htm )

Code : Tout sélectionner

'************ Code Start ************* Option Compare Database Option Explicit 'stocke le numéro de la page du groupe 'et le nombre total de page dans un groupe 'en fonction du *numéro de page Access* Dim GrpArrayPage(), GrpArrayPages() 'nom du groupe courant et précédent '(pour détecter les chagements de groupes' Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant 'variables temporaires Dim GrpPage As Integer, GrpPages As Integer Private Sub ZonePiedPage_Format(Cancel As Integer, FormatCount As Integer) Dim i As Integer If Me.Pages = 0 Then 'premiere passe ReDim Preserve GrpArrayPage(Me.Page + 1) ReDim Preserve GrpArrayPages(Me.Page + 1) GrpNameCurrent = Me!numInterv If GrpNameCurrent = GrpNamePrevious Then GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1 GrpPages = GrpArrayPage(Me.Page) For i = Me.Page - ((GrpPages) - 1) To Me.Page GrpArrayPages(i) = GrpPages Next i Else GrpPage = 1 GrpArrayPage(Me.Page) = GrpPage GrpArrayPages(Me.Page) = GrpPage End If Me!alerteTotal = "Nombre total de page du groupe INVALIDE" Else 'Seconde passe Me!alerteTotal = "" End If 'affichage du nombre de pages Me!ctlGrpPages = "Page " & GrpArrayPage(Me.Page) & " / " & GrpArrayPages(Me.Page) GrpNamePrevious = GrpNameCurrent End Sub '************ Code End *************
Mon probleme :
Quand Access formate l'état, il est requis d'effectuer deux passes pour obtenir l'information [nombre total de page du groupe]
Je pensais qu'access était lui aussi obligé de faire deux passes pour obtenir son nombre total de page (153) et que, logiquement, ma fonction serais appellée deux fois.
Hors mon controle d'alerte alerteTotal maintient l'avertissement et mon nombre total de page reste érroné.


Merci d'avance pour vos réponses ;)
Cerber

Hello
Invité n'ayant pas de compte PHPfrance

27 juin 2005, 17:06

Bonjour

Tes explications sont tres vastes et peu clair.

Soit ton application est sous Microsoft Access et donc cela ne concerne pas le PHP, donc tu es sur le mauvais forum et la je te conseille d'aller demander l'aide sur le forum suivant : http://support.microsoft.com/newsgroups ... .fr.access

Soit tu utilises du PHP avec une base de donnée,
et donc si c'est le cas, il faut faire appel a une requete qui donne le résultat et aussi le nombre de ligne d'engegistrements.
Pour connaitre la fonction, va voir sur le site www.odbcphp.fr.st et tu trouveras l'application CATMDB qui te montrera comment faire.

esperant avoir pu t'aider
a+

hello / sector one

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juin 2005, 17:14

Courageux Hello de s'en prendre à un des administrateurs du forum pour lui dire qu'il est pas sur le bon forum !!!

Celà dit, c'est vrai que je suis pas sûr que tu trouve ton bonheur ici Cerber

PS : Que mes cours de VB me parraissent loin ... :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

27 juin 2005, 17:35

lol, ouais, Hello ne manque pas de souffle, enfin bon.

Personnellement, ce problème de séparation avec ACCESS a toujours été un emmerdement majeur dans les sorties d'État. Je sais que ça se fait, que je l'ai déjà fait aussi, mais c'était il y a un an, ce n'était pas en manipulant le code vba mais directement en mode graphique. Je n'ai malheureusement pas la réponse Cerber et tu m'en vois navré.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 juin 2005, 09:28

Courageux Hello de s'en prendre à un des administrateurs
Courageux courageux, c'est vite dit .... il poste en tant qu'invité :evil:
En fait si je demande ici c'est pour une raison toute simple : je suis limité dans mon surf a deux forums (oui, le reste du net est trop dangereux pour que le service info laisse un stagiaire comme moi y acceder) : celui ci et developpez.com => j'ai demandé dans les deux mais personne a voulu répondre chez developpez :
Forum | Sujets| Auteur | Réponses | Vus
Access | [ETAT] Total de page pour 1 grp (g déjà le début de la sol)| cerber | 0 | 11

Eléphant du PHP | 63 Messages

28 juin 2005, 11:34

bonjour

voila je me suis enregistré

Sinon je ne regarde pas les noms des personnes qui postent les messages... :)

Cela dit, je developpe sous Access, donc je vais essayer de prendre un peu de temps pour voir ton probleme ce midi (ou aujourd'hui)

a+

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 juin 2005, 13:23

lol ok merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juin 2005, 14:48

HORS SUJET Je trouve ça bien justement qu'il parle de la même manière à tout le monde !

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 juin 2005, 15:28

d'accord, c'est vrai que d'un certain point de vue ca peut être hors sujet, mais ca reste une question sur les bases de données (type access pour ce post) et il faut rendre a access ce qui est a access : il sait faire de beaux rapports de manière simple ;)

=> j'amène le sujet dans le forum autre ....

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 juin 2005, 15:35

Je trouve ça bien justement qu'il parle de la même manière à tout le monde !
tu sais, moi ca me fait plus sourire qu'autre chose, comme je l'ai dit ci-dessus, il a pas tout a fait tors :roll:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juin 2005, 15:36

mais non c'est MON message qui est hors sujet.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 63 Messages

29 juin 2005, 16:03

salut

je viens de regarder ton source et celui qui a été fourni par le lien

ils disent qu'il faut modifier les lignes suivantes :

Note: la ligne Me!Salesperson doit être changée pour le nom du contrôle de groupe qui gouverne la numérotation de page. De même, Me!ctlGrpPages est le nom du contrôle du pied de page qui contiendra le numéro de page.


tu as bien modifié le 1er mais par le deuxieme
c'est lui qui t'affiche les bons numéros de pages

j'ai pas testé, mais avec ca, tu dois pouvoir corriger ton probleme
a+

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

29 juin 2005, 16:09

non, en fait j'avais vu et j'ai donc créé le controle ctlGrpPages .
Ca ca marche c'est le résultat qui est pas bon, ca donne :
page 1/1
page 2/2
page 3/3

au lieu de :
page 1/3
page 2/3
page 3/3

pour l'instant j'ai contourné le probleme comme ceci :
'************ Code Start *************
Option Compare Database
Option Explicit

'stocke le numéro de la page du groupe
'et le nombre total de page dans un groupe
'en fonction du *numéro de page Access*
Dim GrpArrayPage(), GrpArrayPages()

'nom du groupe courant et précédent
'(pour détecter les chagements de groupes'
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant

'variables temporaires
Dim GrpPage As Integer, GrpPages As Integer

Private Sub ZonePiedPage_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
If Me.Pages = 0 Then
'premiere passe
ReDim Preserve GrpArrayPage(Me.Page + 1)
ReDim Preserve GrpArrayPages(Me.Page + 1)
GrpNameCurrent = Me!numInterv
If GrpNameCurrent = GrpNamePrevious Then
GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
GrpPages = GrpArrayPage(Me.Page)
For i = Me.Page - ((GrpPages) - 1) To Me.Page
GrpArrayPages(i) = GrpPages
Next i
Else
GrpPage = 1
GrpArrayPage(Me.Page) = GrpPage
GrpArrayPages(Me.Page) = GrpPage
End If
'affichage du nombre de pages
Me!ctlGrpPages = "Page " & GrpArrayPage(Me.Page)

Else
'Seconde passe
'affichage du nombre de pages
Me!ctlGrpPages = "Page " & GrpArrayPage(Me.Page) & " / " & GrpArrayPages(Me.Page)

End If
GrpNamePrevious = GrpNameCurrent
End Sub
'************ Code End *************
comme ca, tant que j'ai pas trouvé comment faire la seconde passe, il n'affichera pas le total :
page 1
page 2
page 3

PS : on lancera l'impression vendredi en fin de matinée => si tu as pas trouvé de solution d'ici là te prend pas la tête, c'est déjà gentil d'avoir essayé :)