Impression flex grid

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 936 fois - Téléchargée 33 fois

Contenu du snippet

ben ...impression de flex grid qui gere a peu pres tout ( taille des colonnes, positionnement, titre ....) en generique

Source / Exemple :


Public Sub imprime_grid(grid As Control, nb_to_print As Integer, topgrid As Integer, large_grid As Integer, hauteur_grid As Integer, left_grid As Integer, trace_ligne As Boolean, titre As String)

Printer.FontSize = 12

Rem initialisation des variables de gestion

Dim nbcol As Integer  ' nombre de colonne dans le grid
Dim nb_row As Integer  ' nombre de lignes dans le frid
Dim marge As Integer ' marge gauche et droite ( si trop faible, tronqué par imprimante
Dim ecartdubord As Integer 'ecart entre ligne de tableau et valeur, c plus bô
Dim largeur_imp As Integer
Dim mem_top As Integer
Dim nbcolfixed As Integer
Dim nbrow_fixed As Integer
Dim maxdown As Integer
Dim debut As Integer
Dim j As Integer
Dim i As Integer
Dim pourcent As Long
Dim same_page As Boolean
Dim not_end As Boolean
Dim index_grid_row As Integer
Dim larg As Integer
Dim newy As Integer

nbcol = grid.Cols
nb_row = grid.Rows
marge = 200
ecartdubord = 100
nbcolfixed = grid.FixedCols
nbrow_fixed = grid.FixedRows
Rem calcul de ces valeurs en fonction des params
If (large_grid = 0) Then
 largeur_imp = Printer.Width - (marge * 2)
Else
 largeur_imp = large_grid
End If

If (hauteur_grid = 0) Then
   maxdown = Printer.Height - 1000
Else
   maxdown = topgrid + hauteur_grid
End If

If (nb_to_print = 0) Then nb_to_print = grid.Rows - 1

Dim tab_col(0 To 100) As Long
debut = marge + left_grid

Rem definition de la largeur des colonnes
tab_col(0) = debut
j = 1
For i = 0 To nbcol - 1
  pourcent = (grid.ColWidth(i) * 100) / grid.Width
  tab_col(j) = debut + ((pourcent * largeur_imp) / 100)
  debut = tab_col(j)
  j = j + 1
Next i
Dim rapport As Double
rapport = largeur_imp / grid.Width
tab_col(j) = largeur_imp + marge

If (titre <> "") Then
  Printer.Print
  Printer.Print
  Printer.Print titre
  Printer.Print
  Printer.Print
End If
Dim memy As Integer
Rem et hop, c parti, mon kiki
memy = Printer.CurrentY
 Printer.Line (tab_col(0), memy)-(largeur_imp + marge, memy)
memy = Printer.CurrentY + 10

same_page = True
index_grid_row = 0
not_end = True

Do While not_end
  Rem tant que po fin de ligne a imprimer
        mem_top = Printer.CurrentY
        Do While same_page And not_end
           Rem et que l'on est sur la meme page
            memy = Printer.CurrentY
            grid.Row = index_grid_row
            For i = 0 To nbcol - 1
              If (i < nbcolfixed) Or (index_grid_row < nbrow_fixed) Then
                Printer.FontBold = True
              Else
                Printer.FontBold = False
              End If
              Rem on boucle sur les colonnes, on ecrit les valeurs
              grid.Col = i
              Printer.CurrentX = tab_col(i)
              Printer.CurrentY = memy
              If (grid.CellPicture = 0) Then
                  larg = tab_col(i + 1) - tab_col(i)
                  If (Printer.TextWidth(grid.Text) > larg) Then
                     Dim tmptxt As String
                     tmptxt = grid.Text
                     Do While Printer.TextWidth(tmptxt) > larg
                        tmptxt = Mid(tmptxt, 1, Len(tmptxt) - 2)
                     Loop
                     Printer.Print tmptxt
                  Else
                     Printer.Print grid.Text
                  End If
                  
                 newy = Printer.CurrentY
              Else
                    Dim rapporth As Double
                    rapporth = Printer.TextHeight("A") / grid.CellHeight
                  Call Printer.PaintPicture(grid.CellPicture, Printer.CurrentX, Printer.CurrentY, grid.CellPicture.Width / rapport, grid.CellPicture.Height / rapporth, 1, 1, grid.CellPicture.Width, grid.CellPicture.Height)
              End If
            Next i
            If (trace_ligne) Then
             Rem si besoin de trait entre les lignes
             Printer.Line (tab_col(0), Printer.CurrentY)-(largeur_imp + marge, Printer.CurrentY)
              Printer.CurrentY = newy + 10
            End If
           
            index_grid_row = index_grid_row + 1
             Rem on cintinue, ou bien ?
            If (index_grid_row > nb_to_print) Then not_end = False
            If (Printer.CurrentY > maxdown) Then same_page = False
        Loop
        
        Rem page fini, ou presque ...y'a plus qu'a tracer les lignes
        For i = 0 To nbcol - 1
      Printer.Line (tab_col(i), mem_top)-(tab_col(i), memy)
        Next i
          Printer.Line (largeur_imp + marge, mem_top)-(largeur_imp + marge, memy)
          Rem au choix ..on pourrait mettre un next page ...
          Rem mais je prefere le end doc, c moins chiant pour annuler en cours d'impression sans abandonner celle qui sont deja faites
        Printer.EndDoc
        Rem histoire de reprendre au debut de la page suivante,
        Rem mais pas non plus trop haut, sinon les premieres lignes seront tronques
        Printer.CurrentY = 200
        same_page = True
Loop

End Sub

Conclusion :


bon, niveau commentaire et explications, c pô top, mais la je suis a la bourre niveau boulot .
Si kkun a un besoin express, laisser un message, je passe souvent pour voir.
je commenterais mieux d'ici un mois

pour ls arguments, kan meme :
grid as control : passer votre grid
nb_to_print as integer : nombre de ligne a imprimer ( ou 0 si tout le grid )
topgrid as integer : top sur la feuille imprimé
largegrid as integer : largeur du resultat sur la feuille
hauteur as integer ...ben a peu pres pareil, mais dans l'autre sens
trace as booleen : oui pour avoir les interligne, non pour n'avoir que les ligne verticales
titre as string : si on nveut nommer le bazar

voila

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
mercredi 28 juin 2006
Statut
Membre
Dernière intervention
25 avril 2008

slt
la source et pratique
Messages postés
3
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
25 juillet 2006

Bonjour, tout d'abord merci pour ce code il est très bon !

Cependant,Aurais-tu une solution pour le faire marcher sous Access 2000? car l'objet Printer n'est pas reconnu dans cette version (enfin il me semble)

Si tu peux me répondre ce serait génial car je dois gérer l'impression d'une flex grid sur du Access 2000.

En te remerciant d'avance !
Messages postés
54
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
6 février 2009

ben comme dit plus haut dans les commentaire, po trop le temps la pour des raisons professionel, mais j'annote ca d'ici un mois ....un meme temps c po super complique a comprendre ....
Messages postés
458
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009

j'ai pas tester le code, mais je doute pas qu'il doit marcher... par contre tu aurais pu mettre plus de commentaire ;)

Amicalement tmcuh
Messages postés
38
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
1 mai 2006

Salut

J'ai testé ta source: Super pratique !
Rien à dire, c'est très beau ! :-))
Si j'ai le temps, je vais essayer de la modifier pour l'enrichir. Parce qu'au fait, moi j'imprimais des trucs via excel ... ça fait des belles mises en pages; mais la rapidité et la portabilité ne sont pas au rendez vous

Une fois de plus, bravo !
10/10 !!! :-))
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.