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

  1. #1
    Rédacteur/Modérateur

    Dans un état Access, apprendre à numéroter les pages d'un groupe « page x sur y »
    Bonjour et bonne année à tous,

    http://claudeleloup.developpez.com/t...-pages-groupe/

    Centres d'intérêt dans ce tutoriel :
    - [Page] et [Pages] sous la loupe ;
    - création d'une table de paires Clé/Valeur en mémoire (utilisation de Collection).

    Vos commentaires sont les bienvenus.
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  2. #2
    Expert éminent sénior
    Bonjour Claude et Bonne Année

    Encore un tutoriel "clarinette" et précis

    Bravo !
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  3. #3
    Rédacteur/Modérateur

    Bravo pour ce nouvel article !

    Encore un support bien utile pour les membres du club
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  4. #4
    Rédacteur/Modérateur

    Bonjour,

    Merci pour les encouragements !
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre régulier
    Bonjour.

    J'ai bien apprécié le paragraphe "si vous êtes pressé".

    Les autres sont aussi pas mal !

    Merci d'avoir diffusé cette solution qui trouvera certainement de très nombreux utilisateurs reconnaissants.


    Je me permet une petite question que je pense pertinente (mais si elle n'est pas au bon endroit, pas de soucis pour la déplacer, ou juste la supprimer et me l'indiquer en MP).

    Peut-on modifier ce code pour qu'il prenne en charge les groupes, mais avec la notion de recto-verso ?

    Pour reprendre l'exemple en photos, les "Mouvements du journal Achat" occupent 3 pages et si on lance une impression recto-verso de tous les mouvements, la première page des "Mouvements du journal Caisse" va se retrouver au dos de la troisième de la page 3 des "Mouvements du journal Achat".

    Du coup, même le "Mouvements du journal Caisse" qui comporte 6 pages (qui pourraient être imprimées sur 3 feuilles recto-verso) va se retrouver avec le début au dos des "Mouvements du journal Achat" et la fin devant le début des "des "Mouvements du journal Ouverture".

    Idéalement, une variable permettrait de choisir :
    - Soit on s'en fiche que tout soit bout à bout (impression recto uniquement de tout l'état)
    - Soit que l'on souhaite une page blanche (de préférence sans rien du tout écrit dessus) derrière la dernière page pour les nombres de page impaires (impression recto-verso de tout l'état, mais avec nécessité de séparation des groupes).

    Comme j'en ai accessoirement besoin, j'ai cherché et trouvé des solutions pour insérer une page blanche.

    Mais je ne vois pas où les intégrer dans votre code pour qu'il continue à fonctionner. (pour l'instant, au mieux mes essais ne produisent aucun effet visible...).

    Une idée ?

    D'avance merci et merci pour votre travail.

  6. #6
    Rédacteur/Modérateur

    Bonjour Access_ible

    Merci pour l’intérêt porté à ce tutoriel.
    Ne peux-tu envisager ceci comme approche :
    - 1er temps : déterminer, au moyen d’une requête, chaque groupe qu’il faudra imprimer ;
    - 2e temps : déclencher une procédure qui consisterait à imprimer — pour chacun des groupes — un état individuel ?
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Membre régulier
    Bonjour.

    Merci pour cette réponse et pour votre contribution à ce fantastique forum.

    Réponse courte : Hé non, malheureusement !

    Réponse détaillée :

    En fait, j'ai déjà un état qui comprend les groupes (et donc les entêtes de groupe) basé sur une table crée en amont par une requête qui ne retient que les entêtes de groupe et y ajoute un certain nombre d'information d'une autre table.
    Ce choix est motivé par la nécessite d'appliquer aux entêtes un traitement qu'il n'est pas utile d'appliquer au reste des données et d'afficher en entête, des informations qui ne sont pas dans la table principale.

    J'ai un sous-état où n'apparaissent que le reste des donnés, liées à l’identifiant unique aux entêtes de l'état.

    Mais le soucis, c'est que pour une même entête, d'une édition à l'autre (et parce que les données évoluent au fil du temps), il peut y avoir une fois 1 page, une fois plusieurs pages, 1 fois rien...

    C'est aussi le cas pour l'exemple que vous donnez (Les mouvements des journaux ne sauraient avoir toujours le même nombre de lignes, et donc toujours occuper le même nombre de pages).

    Par ailleurs, contrairement à votre exemple, mon nombre d'entête varie (la requête qui génère la table est relancée avant l'affichage de l'état).

    L'objectif final de la création de ces état est leur impression.

    Ils seront, de toute manière, imprimés tous ensemble.

    1 seul état trouve tout son intérêt.

    Mon problème, c'est que votre code marche nickel (et je vous en remercie vivement).

    Mais il ne fonctionne de manière pertinente qu'en impression recto.

    Quand je m'aventure à ajouter des morceaux de code pour ajouter une page blanche derrière un nombre de pages impaires, non seulement je n'ai pas ma page en plus, mais votre code est "cassé".

    D'où ma question.

    Encore merci.

  8. #8
    Rédacteur/Modérateur

    Bonjour Access_ible,

    Je n’ai sans doute pas été clair !

    En fait, j'ai déjà un état qui comprend les groupes (et donc les entêtes de groupe) basé sur une table crée en amont par une requête qui ne retient que les entêtes de groupe et y ajoute un certain nombre d'informations d'une autre table.
    Ce choix est motivé par la nécessite d'appliquer aux entêtes un traitement qu'il n'est pas utile d'appliquer au reste des données et d'afficher en entête, des informations qui ne sont pas dans la table principale.

    J'ai un sous-état où n'apparaissent que le reste des données, liées à l’identifiant unique aux entêtes de l'état.

    Mais le souci, c'est que pour un même entête, d'une édition à l'autre (et parce que les données évoluent au fil du temps), il peut y avoir une fois 1 page, « plusieurs pages, 1 fois...
    Imagine qu’il n’y ait qu’un seul groupe, par exemple le premier de la liste actuelle.
    L’état « réduit à un seul groupe » serait-il correct avec ton programme actuel ?
    En d’autres mots, l’état d’un groupe est-il influencé par l’existence d’autres groupes ?


    C'est aussi le cas pour l'exemple que vous donnez (les mouvements des journaux ne sauraient avoir toujours le même nombre de lignes, et donc toujours occuper le même nombre de pages).
    OK. Mais ce que je propose c’est :
    - 1er temps créer (par programme) une table qui contient une ligne par journal à imprimer ;
    - 2e temps lancer (par programme) autant d’impressions qu’il y a de journaux : un état individuel pour chaque journal.
    Remarque que le résultat final serait le même que celui obtenu via la proposition du tutoriel !

    Ils seront, de toute manière, imprimés tous ensemble.
    Moi aussi. Et c’est ton imprimante qui règlerait le problème du verso vierge.

    Quand je m'aventure à ajouter des morceaux de code pour ajouter une page blanche derrière un nombre de pages impaires, non seulement je n'ai pas ma page en plus, mais votre code est "cassé".
    Je n’ai aucune idée du comment insérer une page blanche en cours d’édition lorsque le nombre de pages d’un groupe est impair.
    Montre ton code « qui ne marche pas ».
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Membre régulier
    Bonjour.

    Merci pour ce suivi.

    Je répond de suite pour montrer que je suis sur le coup.

    Mais j'ai besoin d'un peu de temps pour comprendre la réponse et voir comme (et si) je peux l'utiliser sur ma situation actuelle.

    C'est sûr que cette histoire d'imprimante qui réglerait la page en plus est séduisante...

    Je vous tiens au courant

    Encore merci.

  10. #10
    Membre expert
    Bonjour,
    Peut-être quelque chose à exploiter du coté de ce tip d'allen Brown
    http://www.allenbrowne.com/ReportDuplex.html

    CDLT
    "Always look at the bright side of life." Monty Python.

  11. #11
    Rédacteur/Modérateur

    Bonjour micniv,

    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  12. #12
    Membre régulier
    Bonjour.

    Merci pour ces réponses.

    Ça serrait vraiment plus simple pour moi de pouvoir rester sur un seul état pour toutes les situations (J'ai un formulaire jumeau qui s'organise de la même manière et pour la maintenance, et l'évolution, ce serrait plus simple)

    Par ailleurs, cela me semble (pour l'instant) logique d'opter pour une solution impactant l'état pour un recto/verso plutôt que plusieurs états en fonction des situations.

    Alors, de mon côté, j'avais tenté cette modif :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ZonePiedPage_Format(Cancel As Integer, FormatCount As Integer)
        Call MaJoColTable(Me(sChampGroupe), Me.Page)
     
        'Bidouillage_page
        'Si le nombre de page est impair
        'Merci Guiv
        If Right(GetPages([EMRGMNT_CD_ID_M]), 1) Mod 2 <> 0 Then
        EntêteGroupe0.ForceNewPage = 2
        End If
     
    End Sub


    Qui ne produit aucun effet (avec ou sans ces modif, c'est pareil, pas d'erreur, pas de changement)

    J'ai tenté le code proposé par micniv.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub PiedGroupe1_Format(Cancel As Integer, FormatCount As Integer)
    'Merci Allen Browne
    'http://www.allenbrowne.com/ReportDuplex.html
        Dim bIsOdd As Boolean
        bIsOdd = (Me.Page Mod -2)   'Yields 0 for even, or -1 for odd.
        'Hide this Section (and its page break) if already at odd page.
        With Me.Section("PiedGroupe1")
            If .Visible = bIsOdd Then
                .Visible = Not bIsOdd
            End If
        End With
    End Sub

    Il y a deux EntêteGroupe dans l'exemple indiqué et les deux EntêteGroupe comportent des données.

    J'ai donc ajouté un EntêteGroupe1 à l'EntêteGroupe0 déjà présent sur mon état.

    Mais ni l'un ni l'autre ne comportent de données dans mon cas (Les données et la numérotation des pages ne fonctionnent en même temps que quand je met les données d'entête de page à imprimer dans l'entête de page d'état).

    J'ai suivi les paramétrages de lien.

    Si j'ai bien compris, la solution présentée, la page supplémentaire est toujours présente.

    Le code la masque en cas de nombre de pages déjà pair.

    Ça ne produit aucun effet.

    Je me demande s'il ne faudrait pas remplacer
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    bIsOdd = (Me.Page Mod -2)   'Yields 0 for even, or -1 for odd.

    par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    bIsOdd = (getpages([EMRGMNT_CD_ID_M]) Mod -2)   'Yields 0 for even, or -1 for odd.

    J'ai essayé et ça pointe une erreur sur la fonction
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function GetPages(Groupe As String) As Integer
      GetPages = oColTable(Groupe)
    End Function


    Je suis bien conscient que c'est de la bidouille, mais c'est bien pour cela que je suis venu vous poser la question, vous qui êtes à l'origine de code fonctionnel...

    Encore merci.

  13. #13
    Rédacteur/Modérateur

    Désolé de ne pas pouvoir t'aider : je ne dispose pas de l'environnement adéquat pour tester.
    Espérons qu'un autre forumeur puisse prendre le relais.
    Content de t'avoir croisé.
    A+
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  14. #14
    Membre expert
    Salut à vous

    Access_ible,
    Je n'ai pas tout suivi le fil, mais ce que j'entrevoyais, c'est, à l'image du tuto d'Allen Browne ci-dessus, de placer une variable en pied du [groupe à imprimer sur une nouvelle feuille] valorisée avec le numéro de page absolu (depuis la page 1 de l'état) et de déclencher un saut de page, si le numéro de page du précédent pied de groupe est impair.
    Vois si ça peut être adapté sur ton appli.

    EDIT: je vois ci-dessus que tu as essayé cette méthode
    bIsOdd = (Me.Page Mod -2) 'Yields 0 for even, or -1 for odd.
    , mais as-tu vérifié que dans ton contexte, Me.page contient bien le numéro correct de page depuis le début de l'état ?
    CDLT
    "Always look at the bright side of life." Monty Python.

  15. #15
    Expert éminent sénior
    bonsoir,
    une solution qui fonctionne avec le code de ce lien http://access-excel.tips/access-report-page-break-by-group-and-add-blank-page/
    et en pièce jointe la base modifiée :
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

###raw>template_hook.ano_emploi###