OVH Cloud OVH Cloud

Saut de page conditionnel

19 réponses
Avatar
Florent
Bonjour à tous

Dans un état (dans quel état j'erre !),
je souhaiterais toujours terminer sur un nombre pair de pages,
donc si le nombre de pages est impair,
je voudrais ajouter un saut de page après la dernière section.
J'ai tenté le code suivant, ça ne marche pas !!!

Private Sub EntêteGroupe2_Print(Cancel As Integer, PrintCount As Integer)
If (Me.Pages / 2) <> Round(Me.Pages / 2) Then
Beep
EntêteGroupe2.ForceNewPage = 2
End If
End Sub

Je pense que pour vérifier si le nombre de pages est impair
il doit y avoir plus simple que :
If (Me.Pages / 2) <> Round(Me.Pages / 2) Then
mais ça marche.

Toutes vos suggestions seront les bienvenues
Merci par avance

Paul

9 réponses

1 2
Avatar
Willi2004
Pour la solution que je t'ai proposée, on pourrait masquer tous les
contrôles de l'entête de groupe dans la page ajoutée si on veut une page
vierge.

Et pour contourner la nécessité du tri décroissant sur l'entête de groupe,
on pourrait modifier légèrement le code du bouton commandant l'ouverture de
l'état en remplaçant:
Me.NOTE1="" par Me.tonChampDeRegroupement="ZZZZZ".
Puis dans la mise en forme conditionnelle, choisir la couleur de texte
Blanche lorsque la valeur de ce champ est égale à "ZZZZZ". Pour masquer
l'écriture.

Ainsi tu conserve un tri croissant sur le champ de regroupement car alors
"ZZZZZ" se retrouvera forcément à la fin de l'état.


"Florent" a écrit dans le message de news:

| Merci à tous deux de votre implication dans mon modeste problème.
|
| J'ai aussi tenté "ForceNewPage", mais sans succès.
| Si 3stone dit que ça devrait marcher,
| c'est qu'il y a une subtilité que je n'ai pas compris.
| 3stone, pourrais tu regarder l'exemple Bd3 de Willi
| qui est bien la representation du problème avec utilisation de
| "ForceNewPage",
| et nous dire ce qui cloche.
| Merci
| Paul
|
Avatar
3stone
Salut Wili,

"Willi2004"
| J'ai essayé de mettre en oeuvre ce que tu as expliqué dans l'exemple
| élémentaire suivant: http://cjoint.com/?ipvxXMkEec
| L'état comporte 5 pages et j'ai associé ton code à l'événement "Sur
| impression" de la section Détail.
| Malgré cela, à l'impression comme en aperçu avant impression, on a toujours
| 5 pages et non 6 comme le souhaite Florent.
|
| L'exemple suivant quant à lui, illustre l'astuce que j'ai difficilement
| tenté d'expliquer à Florent:
| http://cjoint.com/?ipvyR5Zn6L
| Et comme je l'ai déjà indiqué, on est dans ce cas tenu de trier l'entête de
| groupe suivant l'ordre décroissant.
| La raison? Car sinon, la page rajoutée se mettrait en première position à
| l'ouverture de l'état et serait donc numérotée 1.
| Or, il faut qu'elle termine l'état et soit numérotée 6.
|
| Mais ce que tu proposes serait beaucoup plus interressant si ça pouvait
| marcher. J'ai certainement mal appliqué tes explications.


*C'est* plus intéressant et bien sûr que ça *marche* ;-)

Le temps d'ouvrir ta base, deux - non trois secondes après j'avais 6 pages !
C'est juste un manque de réflexion qui empêche de voir le lézard...

Si je reprends ton état de test, il comporte 5 pages (une par enregistrement)
et puis serait censé "d'imprimer" une sixième... c'est bien cela ?
Mais, t'es tu posé la question : que doit-il imprimer sur cette 6ème page ??

Si l'on considère la façon dont Access gère les états, à défaut bien regarder
en images http://www.3stone.be/access/articles.php?lng=fr&pg9
on comprend que l'on doit s'arranger pour que Access "repousse" une section
sur la page suivante... donc une sixième ;-)
Pour qu'il le fasse réellement, il faut qu'il doive encore imprimer... le pied d'état!
Pied d'état, qui comme tu le sais, vient se placer - non pas à la fin de l'état -
mais bien après la _dernière_ section détail.
Reprends ta base d'essai et ajoute un (petit) pied d'état, même vide, et tu auras
ta sixième page !

Alors, marche ou marche pas ?

PS: Désolé pour le retard...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Willi2004
Salut 3stone.
Je suis ravi de ton retour.
Effectivement on a 6 pages en ajoutant un pied d'etat.
Mais du coup on a un problème: une page est est systématiquement rajoutée à
la fin, même si le nombre de pages est déjà pair.
Pour le vérifier, porte à 8 par exemple le nombre d'enregistrements de la
table source.

Cordialement.
Willi2004.


"3stone" a écrit dans le message de news:
%
| Salut Wili,
|
| "Willi2004"
|| J'ai essayé de mettre en oeuvre ce que tu as expliqué dans l'exemple
|| élémentaire suivant: http://cjoint.com/?ipvxXMkEec
|| L'état comporte 5 pages et j'ai associé ton code à l'événement "Sur
|| impression" de la section Détail.
|| Malgré cela, à l'impression comme en aperçu avant impression, on a
toujours
|| 5 pages et non 6 comme le souhaite Florent.
||
|| L'exemple suivant quant à lui, illustre l'astuce que j'ai difficilement
|| tenté d'expliquer à Florent:
|| http://cjoint.com/?ipvyR5Zn6L
|| Et comme je l'ai déjà indiqué, on est dans ce cas tenu de trier l'entête
de
|| groupe suivant l'ordre décroissant.
|| La raison? Car sinon, la page rajoutée se mettrait en première position à
|| l'ouverture de l'état et serait donc numérotée 1.
|| Or, il faut qu'elle termine l'état et soit numérotée 6.
||
|| Mais ce que tu proposes serait beaucoup plus interressant si ça pouvait
|| marcher. J'ai certainement mal appliqué tes explications.
|
|
| *C'est* plus intéressant et bien sûr que ça *marche* ;-)
|
| Le temps d'ouvrir ta base, deux - non trois secondes après j'avais 6 pages
!
| C'est juste un manque de réflexion qui empêche de voir le lézard...
|
| Si je reprends ton état de test, il comporte 5 pages (une par
enregistrement)
| et puis serait censé "d'imprimer" une sixième... c'est bien cela ?
| Mais, t'es tu posé la question : que doit-il imprimer sur cette 6ème page
??
|
| Si l'on considère la façon dont Access gère les états, à défaut bien
regarder
| en images http://www.3stone.be/access/articles.php?lng=fr&pg9
| on comprend que l'on doit s'arranger pour que Access "repousse" une
section
| sur la page suivante... donc une sixième ;-)
| Pour qu'il le fasse réellement, il faut qu'il doive encore imprimer... le
pied d'état!
| Pied d'état, qui comme tu le sais, vient se placer - non pas à la fin de
l'état -
| mais bien après la _dernière_ section détail.
| Reprends ta base d'essai et ajoute un (petit) pied d'état, même vide, et
tu auras
| ta sixième page !
|
| Alors, marche ou marche pas ?
|
| PS: Désolé pour le retard...
|
| --
| A+
| Pierre (3stone) Access MVP
| Perso: http://www.3stone.be/
| MPFA: http://www.mpfa.info/ (infos générales)
|
Avatar
Willi2004
Pourrais-tu me renvoyer le résultat pour que je procède à un test?
Via www.cjoint.com


"Florent" a écrit dans le message de news:

| On a eu la peau du lézard !
|
| Salut à tous,
| Dans la Bd3 de Willi, j'ai donc ajouté un pied d'état,
| j'ai supprimé le saut de page du pied de groupe Elève,
| et placé un saut de page avant l'En-tête de groupe Elève,
| puis placé le code suivant :
|
| Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
| If (Me.Page = Me.Pages) And (Me.Pages Mod 2 = 1) Then
| Me.PiedÉtat.ForceNewPage = 1
| End If
| End Sub
|
| et ça marche très bien,
| c'est à dire que le pied de rapport se place pas sur une nouvelle page
| si le nombre de page est impair.
|
| Merci à tous pour votre aide
| et à + pour de nouvelles et passionnantes aventures avec Access
|
| Paul
|
Avatar
Florent
On a eu la peau du lézard !

Salut à tous,
Dans la Bd3 de Willi, j'ai donc ajouté un pied d'état,
j'ai supprimé le saut de page du pied de groupe Elève,
et placé un saut de page avant l'En-tête de groupe Elève,
puis placé le code suivant :

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
If (Me.Page = Me.Pages) And (Me.Pages Mod 2 = 1) Then
Me.PiedÉtat.ForceNewPage = 1
End If
End Sub

et ça marche très bien,
c'est à dire que le pied de rapport se place pas sur une nouvelle page
si le nombre de page est impair.

Merci à tous pour votre aide
et à + pour de nouvelles et passionnantes aventures avec Access

Paul
Avatar
Eric
Bonjour Willi2004,

Encore une horloge qui fait des siennes, Elle est déjà à l'heure
d'hiver! ;-) ou c'est mon safari qui décoconne.

Pourrais-tu me renvoyer le résultat pour que je procède à un test?
Via www.cjoint.com

--

A+
Eric
http://www.mpfa.info/

Avatar
Florent
Willi,
Je viens de t'adresser le modèle sur : http://cjoint.com/?irniUywiqE
en fait il est un peu différent de ce que je te disais précédemment
Le code est le suivant :

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
If Me.Page = Me.Pages And Me.NbPages Mod 2 = 1 Then
Me.PiedÉtat.ForceNewPage = 1
End If
End Sub

dans l'état, j'ai créé un contrôle NbPages qui renvoie le nombre de page de
l'état
AVANT que le saut de page avant le pied d'état n'ait été créé
C'était peut être là que se cachait le lézard

A+
Paul
Avatar
Willi2004
Bonjour Eric.
Normal, ici c'est la Côte d'Ivoire d'où le décalage observé.


"Eric" a écrit dans le message de news:

| Bonjour Willi2004,
|
| Encore une horloge qui fait des siennes, Elle est déjà à l'heure
| d'hiver! ;-) ou c'est mon safari qui décoconne.
|
| > Pourrais-tu me renvoyer le résultat pour que je procède à un test?
| > Via www.cjoint.com
| >
| --
| A+
| Eric
| http://www.mpfa.info/
Avatar
Willi2004
Mes différents tests m'ont permis de tirer les conclusions suivantes:

1- Ca ne marche pas avec Me.PiedÉtat.ForceNewPage = 2.
Il faut utiliser Me.PiedÉtat.ForceNewPage = 1

2- Acces ne réagit pas favorablement lorsqu'on écrit:
If (Me.Page = Me.Pages) And (Me.Pages Mod 2 = 1)
Pour que ça marche, il faut utiliser une zone de texte indépendante nommée
par exemple "Nbpages" et dont la source contrôle est =[Pages].
La ligne de code ci-dessus devient donc:
If (Me.Page = Me.Pages) And (Me.Nbpages Mod 2 = 1)
ou encore:
If (Me.Page = Me.Nbpages) And (Me.Nbpages Mod 2 = 1)

3- Enfin pour que ça fonctionne, il faut mettre un saut de page avant
l'entête de groupe et aucun saut de page au niveau du pied de groupe.

Pour Florent: dernier point à corriger, tu as à la fin 8/7 au lieu de 8/8.

En somme c'était un problème intéressant qui nous a fait progresser en
connaissances.




"Florent" a écrit dans le message de news:

| Willi,
| Je viens de t'adresser le modèle sur : http://cjoint.com/?irniUywiqE
| en fait il est un peu différent de ce que je te disais précédemment
| Le code est le suivant :
|
| Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
| If Me.Page = Me.Pages And Me.NbPages Mod 2 = 1 Then
| Me.PiedÉtat.ForceNewPage = 1
| End If
| End Sub
|
| dans l'état, j'ai créé un contrôle NbPages qui renvoie le nombre de page
de
| l'état
| AVANT que le saut de page avant le pied d'état n'ait été créé
| C'était peut être là que se cachait le lézard
|
| A+
| Paul
|
1 2