Kouran666
Messages postés20Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention14 décembre 2004
-
1 déc. 2004 à 11:27
cs_labout
Messages postés1356Date d'inscriptionsamedi 8 décembre 2001StatutMembreDernière intervention23 octobre 2006
-
1 déc. 2004 à 22:40
Merci à tous ceux qui ont tenter de résoudre mon problème d'impression. Malheureusement le problème continue.
Réexplication du problème :
Lors d'impression multipages (impression simple aucun problème) se lance, suite à ma tâche d'impression, une tâche de plusieurs 10ène de pages. le résultat est l'impression anarchique de diverses éléments de la flexgrid jusqu'au manque de papier dans la plupart des cas (type un mot par feuille).
Voici mon algo d'impression multipages Tel qu'il est actuellement :
'Si plus d'une page lancement procédure
Private Sub PageSuivante()
.FontSize = 10
For i = 0 To 7
.CurrentY = 3
With MSFlexGrid1
.Col = i
.Row = 0
End With
If i = 0 Then
.CurrentX = 1
ElseIf i = 1 Then
.CurrentX = 4.5
ElseIf i = 2 Then
GoTo Suivant4
ElseIf i = 3 Then
.CurrentX = 11.6
ElseIf i = 4 Then
.CurrentX = 14.1
ElseIf i = 5 Then
.CurrentX = 15.3
ElseIf i = 6 Then
.CurrentX = 16.9
Else
.CurrentX = 17.8
End If
Printer.Print MSFlexGrid1.Text
Suivant4:
Next i
.FontSize = 9
.FontBold = False
For j = j To Compteur - 1
For i = 0 To 7
.CurrentY = 3.1 + 0.5 * (j - nbLignes)
With MSFlexGrid1
.Col = i
.Row = j
End With
If i = 0 Then
.CurrentX = 0.5
ElseIf i = 1 Then
.FontSize = 8
.CurrentX = 2.7
If Len(MSFlexGrid1.Text) > 18 Then
TextAbreg = Left(MSFlexGrid1.Text, 60)
Printer.Print TextAbreg
GoTo Suivant3
End If
ElseIf i = 2 Then
GoTo Suivant3
ElseIf i = 3 Then
.CurrentX = 11.3
If Len(MSFlexGrid1.Text) > 18 Then
TextAbreg = Left(MSFlexGrid1.Text, 18)
Printer.Print TextAbreg
GoTo Suivant3
End If
ElseIf i = 4 Then
.FontSize = 9
.CurrentX = 14.1 + 0.75 - .TextWidth(MSFlexGrid1.Text)
ElseIf i = 5 Then
.CurrentX = 15.8 + 0.7 - .TextWidth(MSFlexGrid1.Text)
If MSFlexGrid1.Text = "0.00" Then
GoTo Suivant3
End If
ElseIf i = 6 Then
.CurrentX = 17 + 0.5 - .TextWidth(MSFlexGrid1.Text)
Else
.CurrentX = 18.3 + 1.5 - .TextWidth(MSFlexGrid1.Text)
End If
Printer.Print MSFlexGrid1.Text
Suivant3:
Next i
If j - nbLignes > 39 And j < Compteur - 1 Then
nbLignes = j - 1
Currentj = j + 1
Printer.EndDoc
PageSuivante ElseIf j Compteur - 1 And Imprime True Then
Imprime = False
FinImpression ' procédure d'impression de bas de page
End If
Next j
End With
Exit Sub
Err_Imprimante:
Printer.KillDoc
Printer.EndDoc
MsgBox "Erreur Interne de l'imprimante"
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 1 déc. 2004 à 19:09
salut
à mon avis :
- le Printer.EndDoc après Printer.KillDoc ne sert à rien
- Printer.EndDoc indique la fin d'impression mono ou multi page peu importe mais si tu as plusieurs pages à imprimer tu fais un seul enddoc à la fin...
- éviter la récursivité quand on peut s'en passer...
sinon, j'ai essayé de deviner à quoi correspondent tes variables :
je mettrais cela (sans savoir vraiment ce que tu veux faire)
'si ce n'est toujours pas ca : explique ce que tu veux faire et à quoi correspondent tes variables (globales ?)
Sub Header()
With Printer
.Font = "MS Sans Serif"
Printer.ScaleMode = 7
.CurrentX = 13.5
.CurrentY = 27.5
Printer.Print "Page : " & .Page & "/" & nbPages
.FontBold = True
Printer.Line (0.5, 3.5)-(20.5, 3.5), vbBlack
.FontSize = 10
For i = 0 To 7
.CurrentY = 3
With MSFlexGrid1
.Col = i
.Row = 0
End With
If i = 0 Then
.CurrentX = 1
ElseIf i = 1 Then
.CurrentX = 4.5
ElseIf i = 2 Then
GoTo Suivant4
ElseIf i = 3 Then
.CurrentX = 11.6
ElseIf i = 4 Then
.CurrentX = 14.1
ElseIf i = 5 Then
.CurrentX = 15.3
ElseIf i = 6 Then
.CurrentX = 16.9
Else
.CurrentX = 17.8
End If
Printer.Print MSFlexGrid1.Text
Suivant4:
Next i
End With
End Sub
'Si plus d'une page lancement procédure
Private Sub PageSuivante()
Dim jj As Long, Compteur As Long, nbLignesImprimées As Long
On Error GoTo Err_Imprimante
With Printer
.FontSize = 9
.FontBold = False
' jj = 0
For j = 0 To nbLignes - 1
For i = 0 To 7
.CurrentY = 3.1 + 0.5 * (j - nbLignes)
With MSFlexGrid1
.Col = i
.Row = j
End With
If i = 0 Then
.CurrentX = 0.5
ElseIf i = 1 Then
.FontSize = 8
.CurrentX = 2.7
If Len(MSFlexGrid1.Text) > 18 Then
TextAbreg = Left(MSFlexGrid1.Text, 60)
Printer.Print TextAbreg
GoTo Suivant3
End If
ElseIf i = 2 Then
GoTo Suivant3
ElseIf i = 3 Then
.CurrentX = 11.3
If Len(MSFlexGrid1.Text) > 18 Then
TextAbreg = Left(MSFlexGrid1.Text, 18)
Printer.Print TextAbreg
GoTo Suivant3
End If
ElseIf i = 4 Then
.FontSize = 9
.CurrentX = 14.1 + 0.75 - .TextWidth(MSFlexGrid1.Text)
ElseIf i = 5 Then
.CurrentX = 15.8 + 0.7 - .TextWidth(MSFlexGrid1.Text)
If MSFlexGrid1.Text = "0.00" Then
GoTo Suivant3
End If
ElseIf i = 6 Then
.CurrentX = 17 + 0.5 - .TextWidth(MSFlexGrid1.Text)
Else
.CurrentX = 18.3 + 1.5 - .TextWidth(MSFlexGrid1.Text)
End If
Printer.Print MSFlexGrid1.Text
Suivant3:
Next i
If Compteur = nb_de_ligne_par_pages Then
FinImpression 'bas de page
Compteur = 0
nbLignesImprimées = nbLignesImprimées + nb_de_ligne_par_pages
If nbLignesImprimées < nbLignes Then
Printer.NewPage
Header
End If
Else
Compteur = Compteur + 1
End If
Next j
End With
Printer.EndDoc
Exit Sub
Err_Imprimante:
Printer.KillDoc
MsgBox "Erreur Interne de l'imprimante"