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

IHM Discussion :

Le nombre d enregistrement par page


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Le nombre d enregistrement par page
    *Bonjour,*

    comment peut on fixer le nbre d enregistrement dans etat(access 2007) par exemple:
    j ai 90 persomme et je vuex que la page 1 affiche le 20 premeire personne, la page 2 du 21 a 40 personnes et page 3 du 41 a 60 et page 4 du 61 a 81 et la dernier contient 10 enregistrements(personnes)
    merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Tu ne peux pas directement.

    La seulle solution que je connaisse c'est d'ajouter à la source un champ calculé qui va te donner la "Page" puis de faire une regroupement sur ce champ et de forcer le saut de page à la fin du regroupement.

    Ex de calcul de champ NumPage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int(DCount("taClef", "taSource", "[TaClef]<=" & [TaClef]) / NbPersonnePage)+1
    Évidement cela suppose que :
    1. 1 ligne personne a toujours la même hauteur.
    2. tu as une clef de tri disponible pour ordonner tes données.


    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Dans ton état, tu ajoutes un contrôle "Cpteur" avec les propriétés comme dans la miniature.

    Dans l'événement de la section Détail, ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     Dim Reste As Long
     Reste = Me.cpteur Mod 20
     If Reste = 0 Then
         Me.Détail.ForceNewPage = 1
       Else
         Me.Détail.ForceNewPage = 0
     End If
    End Sub
    Concrètement, quand le compteur est un multiple de 20, on force le saut de page.
    Quand ce n'est pas le cas, on laisse faire Access.
    Images attachées Images attachées  

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Claude

    Et cette solution évite d'avoir besoin d'une clef de tri ... cool.

    La contrainte de hauteur de ligne constante demeure. Si pour une raison ou une autre une ou plusieurs lignes sont plus hautes, tu vas avoir un saut de page au beau milieu de ta page de débordement.

    Je me demande si on ne pourrai pas remettre le compteur à 0 en début de page. Qu'en penses-tu Claude ?

    A+

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour René,

    Content de te croiser, je ne m’étais pas rendu compte que nous étions en même temps sur la balle !

    Je n’avais pas pensé au fait que la hauteur des lignes pouvait varier, ou plus généralement, que le nombre d’enregistrements s’avérerait trop grand pour une page.

    Vois l’exemple joint :
    - j’ai une zone de texte autoextensible ;
    - le nombre maximum est 30 ;
    - j’ai rendu Cpteur visible… pour qu’on y voie clair.

    1. Avec mon code proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     Dim Reste As Long
     Reste = Me.cpteur Mod 30
     If Reste = 0 Then
         Me.Détail.ForceNewPage = 1
       Else
         Me.Détail.ForceNewPage = 0
     End If
    End Sub
    On obtient ceci :





    2. Si on tente de remettre Cpteur à Zéro au changement de page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     Dim Reste As Long
     Reste = Me.cpteur Mod 30
     If Reste = 0 Then
         Me.Détail.ForceNewPage = 1
         Me.cpteur = 0
       Else
         Me.Détail.ForceNewPage = 0
     End If
    End Sub
    On obtient malheureusement ceci :



    3. Je crois qu'une bonne solution est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     Dim Reste As Long
     Dim Rupture As Long
     Reste = Me.cpteur - Rupture Mod 30
     If Reste = 0 Then
         Me.Détail.ForceNewPage = 1
         Rupture = Me.cpteur
       Else
         Me.Détail.ForceNewPage = 0
     End If
    End Sub
    Qui donne ceci



    Bon week-end.


    P.-S. Ne tire pas de conclusion hâtive au sujet de la table que je prends dans mon exemple !
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ou sinon, on déclare la variable compteur dans l'entête du module de classe de l'état et à chaque detail_format, on incrémente.

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Merci Christophe pour cette bonne idée : elle dispense d’ajouter un compteur « technique » dans l’état.
    Je propose le code suivant en appliquant ton idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Compare Database
    Option Explicit
     
    Dim iCpteur As Integer        'Pour compter les lignes d'une page
    Dim iEcrits As Integer        'Pour compter le nbre de lignes actuellement écrites
    Dim iNumPage As Integer       'Pour contrôler le changement de page opéré par Access
    Dim bArretControle As Boolean 'Pour arrêter le contrôle si anomalie
    Dim iMax As Integer           'Le nbre souhaité d'enregistrements par page
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
      '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      iMax = 30     ' <<<<<<<<<<<<<<<<<<Inscrire le Nbre maximum
      '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     
      If bArretControle Then Exit Sub
     
      If iNumPage = 0 Then iNumPage = 1  'pour initialiser à 1 la 1re fois
      'on va contrôler que le chgt de page intervient bien à un multiple de iMax
      If iNumPage <> Me.Page Then  'on vient donc de changer de page
          If iEcrits Mod iMax <> 0 Then 'le nbre de lignes n'est pas un multiple de iMax
              MsgBox "Problème à cette page : pas assez d'espace" & vbLf _
                       & "pour imprimer " & iMax & " lignes.", vbCritical
              bArretControle = True
          End If
      End If
      iNumPage = Me.Page
     
      iEcrits = iEcrits + 1
      iCpteur = iCpteur + 1
     
      If iCpteur Mod iMax = 0 Then
          Me.Détail.ForceNewPage = 1
        Else
          Me.Détail.ForceNewPage = 0
      End If
    End Sub


    Cette fois, si on a prévu un nombre de lignes trop grand pour l’espace disponible, le programme le signale et l’impression continue en laissant Access gérer à l’ordinaire.
    Images attachées Images attachées  

Discussions similaires

  1. [Conception] gérer le nombre de lignes par page
    Par john.dbc dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/08/2006, 20h20
  2. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 12h22
  3. [CR] Compter le nbre d'enregistrement par page.
    Par sylviefrfr dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 21/02/2006, 10h21
  4. Réponses: 7
    Dernier message: 05/12/2003, 10h14
  5. XMLGram et nombre d'enregistrements par page
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 7
    Dernier message: 26/02/2003, 12h35

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