Programme trop lent (travaille sur des chaines)

execrator Messages postés 16 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 mars 2009 - 2 juin 2005 à 14:39
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 2 juin 2005 à 17:15
Bonjour mon programme sert à imprimer un fichier contenant du texte brut, seulement voila ce ficheir contient des caractères spéciaux comme " " qui correspond à un saut de page(fin du document on imprime su rune nouvelle page), seulement mon ficheir texte peut faire 1mo par exemple...Et pour imprimer sur des pages differentes je procède comme cela : j'enregistre le ficheir dans une variable string j'affiche la variable dans une richtextbox (pour la capacité) et apres je repere tous les caracttères " " j'enregistrent leurs coordonnées dan sun tabelau ensuite j'affiche dans chaque partie du texte qui correspond a une page dans une richtextbox differente. ensuite je supprime le caractère " " de chaque richtextbox pour ne pas limprimer et ensuite j'imprime chaque richtextbox.
le fichier en general contient que quelques pages mais ilpeu en contenir des centaines parfois dans ce cas la avant que l'impression de toutes les text box ce lance j'atend 15min

Private WithEvents txtObj As TextBox


Private Sub Form_Load()
Dim x(5000), i, j, k As Variant
Dim st, prem As String


Set txtObj = Controls.Add("VB.TextBox", "txtObj")


st = "print.spl"
Open st For Binary As #1
prem$ = Space$(FileLen(st))
Get #1, , prem$
Close #1
'Affiche le fichier dans la textbox(0)
Text1(0).Text = prem$



'Releve les coordonnées des differentes pages
'Le caractère ' ' correspond à un saut de page
x(0) = InStr(Text1(0).Text, " ")
If x(0) Then
i = 1


boucle = 0
While boucle = 0

x(i) = InStr(x(i - 1) + 1, Text1(0).Text, " ")
DoEvents
If x(i) Then
i = i + 1
Else
boucle = 1
End If

Wend


End If


'Affiche chaques pages dans une textbox differente


x(i) = Len(Text1(0))
If i > 1 Then
For j = 1 To i
Load Text1(j)
DoEvents
Text1(j).Text = Mid(Text1(0).Text, x(j - 1) + 1, x(j) - x(j - 1))
DoEvents
Next
End If


'Supprime le caractère ' '
For j = 1 To i - 1
Text1(j).Text = Left(Text1(j).Text, Len(Text1(j).Text) - 1)
DoEvents
Next


'Paramètrage de l'imprimante
Printer.FontName = "Lucida console"
Printer.FontSize = "9,75"
Printer.FontBold = True
Printer.Orientation = "2"


'On imprime
If i > 1 Then
For j = 1 To i
If (x(j) - x(j - 1) - 1 > 20) Then
Printer.Print Text1(j).Text
DoEvents
Printer.EndDoc
DoEvents
End If
Next
Else
Printer.Print Text1(0).Text
DoEvents
Printer.EndDoc
DoEvents
End If


End
End Sub

2 réponses

tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
2 juin 2005 à 14:57
C'est un peu normale que ça ram dans de cas lol

T'as machine c'est quoi?

T'as essayé de faie un ctrl+H au lieu de faire une macro?

TBBUIM
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
2 juin 2005 à 17:15
Sinon, regarde aussi l'instruction "replace"... ça peut servir dans ton cas!!!



Enjoy



(Si un réponse vous convient, cliquez sur le bouton juste en dessous...)
0
Rejoignez-nous