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

Access Discussion :

Dans un état Access, apprendre à numéroter les pages d'un groupe « page x sur y » [Tutoriel]


Sujet :

Access

  1. #1
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut 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.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 856
    Points : 14 968
    Points
    14 968
    Par défaut
    Bonjour Claude et Bonne Année

    Encore un tutoriel "clarinette" et précis

    Bravo !

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 424
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Bravo pour ce nouvel article !

    Encore un support bien utile pour les membres du club

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,

    Merci pour les encouragements !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    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

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    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 ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    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

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    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 ».

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    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
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 944
    Points : 4 869
    Points
    4 869
    Par défaut
    Bonjour,
    Peut-être quelque chose à exploiter du coté de ce tip d'allen Brown
    http://www.allenbrowne.com/ReportDuplex.html

    CDLT

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour micniv,

    Nom : Chapeau.png
Affichages : 1228
Taille : 41,2 Ko

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    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

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    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+

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 944
    Points : 4 869
    Points
    4 869
    Par défaut
    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

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 856
    Points : 14 968
    Points
    14 968
    Par défaut
    bonsoir,
    une solution qui fonctionne avec le code de ce lien http://access-excel.tips/access-repo...dd-blank-page/
    et en pièce jointe la base modifiée : NumPagesGroupe.zip

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2006, 13h07

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