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
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.