Visites

   visiteurs

   visiteurs en ligne

Sujet n°236 Mise en forme état
    par marsouin le 16/03/2009 : 00:31

Bonjour Pierre,

Après 2 jours de recherche sur le net, une fois de plus, je craques et je m'en retourne vers toi. confused

J'ai un état avec champs extensibles dans la section détails.

Pour formater un tableau de type Word, j'utile, sur impression, me.line(), pour faire les traits verticaux de chaque côté de chaque contrôles.

Pour séparer chaque groupe, j'utilise, dans le pied de groupe, la même chose, pour faire un trait horizontal.

Seulement voilà, lorsque le groupe est en bas de page et qu'il est trop grand, j'ai une partie sur une page et une partie sur la page suivante. Je n'ai pas ce trait horizontal pour finaliser la mise en forme de la page en bas de tableau. De plus, je ne dois pas mettre le groupe en insécable afin d'optimiser la page avec le maximum d'enregistrement.

Comment faire pour savoir, sur impression de la section détail par exemple, que je suis sur le dernier enregistrement de la page afin d'y ajouter un trait horizontal et donc de fermer le tableau et que cela soit propre dans l'aperçu. cry

Si ce dernier enregistrement est une fin de groupe, alors les traits se confondront.

Comme on dit à Tahiti : Maruuru metei (merci beaucoup) biggrin

Marsouin

 


Réponse n° 1 par 3Stone le 17/03/2009 : 14:52
Bonjour,


Dixit...
Comment faire pour savoir, sur impression de la section détail par exemple, que je suis sur le dernier enregistrement de la page afin d'y ajouter un trait horizontal et donc de fermer le tableau et que cela soit propre dans l'aperçu.


Ben... je ne connais pas de propriété ou de méthode simple pour savoir ou l'on se trouve...

Il faudrait faire des essais...
Il me semble que l'on peut intérroger la "hauteur" de certaines sections et peut-être ainsi déduire que l'on est arrivé en bas de la page.
Si je trouve le temps de faire ces essais, je reviendrais avec les résultats biggrin

Cordialement,
Pierre(3stone)

Réponse n° 2 par marsouin le 18/03/2009 : 04:02

Bonjour Pierre,

Une fois de plus, merci de ta réponse. En attendant d'avoir de plus amples informations, je vais essayer en cherchant à connaître la hauteur de section.

Merci

Marsouin 

Réponse n° 3 par marsouin le 19/03/2009 : 00:41

Bonjour Pierre,

J'ai enfin trouver une solution. Je me permets de mettre le code pour les personnes que cela interesseraient.

Merci de ne pas rire, je ne suis pas un professionnel biggrin

Marsouin

Option Explicit
Dim Haut_Detail As Double 'Pour calculer la hauteur de la section détail lors du Détail_Print

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)

'Formatage du tableau pour prendre en compte une éventuelle extension du contrôle _
            vers le bas au cas où les données seraient plus grandes que la taille du contrôle

'////////////////////////////////// Immat correspond au nom du champ extensible ///////////////////////////////////////
  
' ===== Déclaration =====
    Dim oCtrl As control
  
    ' ===== On enlève le cadre de tous les contrôles =====
    For Each oCtrl In Me.Section(acDetail).Controls  ' On parcoure toutes les zones de texte de la section
        If TypeOf oCtrl Is TextBox Then          ' On teste si ce sont des textbox
            oCtrl.BorderStyle = 0                    ' On rend la bordure invisible de chaque contrôle
            oCtrl.BackStyle = 0                      ' On rend le fond transparent de chaque contrôle
           
            Me.DrawWidth = 20                        ' Epaisseur du trait en twips soit 1 point
                   
            'Trait vertical sur le côté gauche de chaque contrôle
                Me.Line (oCtrl.Left, oCtrl.Top)- (oCtrl.Left, Me.Immat.Height), vbBlack
       End If
    Next oCtrl
    
     'Trait vertical sur le côté droit du tableau
                Me.Line (Me.Width, Me.Immat.Top)-(Me.Width, Me.Immat.Height), vbBlack
    
Haut_Detail = Haut_Detail + Me.Immat.Height 'Cumule la hauteur de la section pour chaque enregistrement _
            afin d'en définir la position Y pour le trait horizontal (Report_Page) de l'état
 
'Le code recommence pour l'enregistrement suivant

End Sub

Private Sub Report_Page()

Me.DrawWidth = 20 'Epaisseur du trait en twips soit 1 point

Dim CoordY As Integer

CoordY = Me.Section(acHeader).Height + Me.EntêteGroupe2.Height + Haut_Detail

Select Case Page
'Si le groupe est sur 2 pages, un trait sera placé en bas de tableau
    Case 1  'Si on est sur la 1° page
        'Le trait commence à partir de la hauteur de l'entête d'état + hauteur de l'entête de groupe + hauteur de la section détail _
                définie par la variable "Haut_Detail" de la section détail
            Me.Line (0, CoordY)- (Me.Width, CoordY), vbBlack
                   
    Case Else 'Si on est sur une autre page, on ne prend pas en compte la hauteur de l'entête d'état
        Me.Line (0, Me.EntêteGroupe2.Height + Haut_Detail)- _
                    (Me.Width, Me.EntêteGroupe2.Height + Haut_Detail), vbBlack
End Select

Haut_Detail = 0 'On remet la variable de la hauteur de la section détail à 0 pour la prochaine page

End Sub

Private Sub PiedGroupe0_Print(Cancel As Integer, PrintCount As Integer)
'Trait horizontal en bas de chaque group

Réponse n° 4 par marsouin le 19/03/2009 : 00:43

Oups tongue, il n'y avait pas assez de place pour tout mettre. Voici la suite et fin.

Marsouin

Private Sub PiedGroupe0_Print(Cancel As Integer, PrintCount As Integer)
'Trait horizontal en bas de chaque groupe
'Hauteur du pied de groupe : 0.002 cm
                Me.Line (0, 0)-(Me.Width, 0), vbBlack
End Sub

[ Retour à la liste des sujets ]

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut