OVH Cloud OVH Cloud

impression string

14 réponses
Avatar
Joel
bonjour, je souhaiterais imprimer un string de longueur variables (pouvant
aller jusqua 400 carateres) mon probleme est que losque je l'imprime
(printer.print MaVariable) il imprime tous sur une ligne donc pas le string
complet ou en dehors de l'imprimante, j'ai pourtant definit la largeur
d'impression de l'imprimante:
Printer.PaperSize = vbPRPSA4
Printer.ScaleMode = vbMillimeters
faut il decouper la chaine de caractere ou y a t'il plus simple, merci de
vos conseil.

10 réponses

1 2
Avatar
X
Bonjour,

Pour ma part je coupe la chaîne, d'autant que ça doit faire dans les 7
lignes tes 400 signes/espaces...

Autre possibilité, tu affiche tes lignes dans un objet, puis au moment
de l'imression tu rends tous les objets imprimables invisibles (à part celui
contenant ton texte), et tu imprimes la form
PrintForm

Tu peux passer par le bloc-notes, et autre logiciels...

Tu peux aussi faire une routine de gestion de l'impession, voire à la
justifier, comme ça par exemple:

Dim maxi As Long
Dim combien As Long
Dim avance As Long
Dim texte_1 As String
Dim texte_2 As String
Dim o_s As String * 1
Dim o_n As Integer
Dim b As Long
texte_1 = Text1.Text ' texte : imp + transfert
maxi = Len(texte_1) ' lgr maxi texte
combien = 1
avance = 1
For b = 1 To maxi
o_s = Mid(texte_1, b, 1)
texte_2 = texte_2 + o_s
o_n = Asc(o_s)
If o_n = 13 Then: combien = 0
If combien > 64 And o_n = 32 Then
texte_2 = texte_2 + Chr(13)
texte_2 = texte_2 + Chr(10)
combien = 0
End If
combien = combien + 1
avance = avance + 1
Next b
Printer.FontName = "courier new"
Printer.FontSize = 8
Printer.Print texte_2
Printer.EndDoc

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Joel" a écrit dans le message de news:
44eabd32$0$866$
bonjour, je souhaiterais imprimer un string de longueur variables (pouvant
aller jusqua 400 carateres) mon probleme est que losque je l'imprime
(printer.print MaVariable) il imprime tous sur une ligne donc pas le
string complet ou en dehors de l'imprimante, j'ai pourtant definit la
largeur d'impression de l'imprimante:
Printer.PaperSize = vbPRPSA4
Printer.ScaleMode = vbMillimeters
faut il decouper la chaine de caractere ou y a t'il plus simple, merci de
vos conseil.




Avatar
Driss HANIB
Bonjour Joel
en fait il faut utiliser la propriété TextWidth de l'objet printer.

1. il faut que tu connaisses la largeur imprimable dont tu disposes..
2. tu calcules le nombre de caractères qu'il faut pour ne pas dépasser cette
largeur

exemple simplifié
Dim LImprimable as single ' largeur imprimable autorisée
Dim I as long
Dim MaChaine as string
Dim ChaineImp as string ' chaine qui sera imprimée

ChaineImp=vbnullstring
I=0
While Printer.TextWidth(ChaineImp) <= LImprimable
I=I+1
ChaineImp=left$(MaChaine,I)
Wend

bon ici je ne gère pas les mots..
il faudrait alors utiliser la function split avec comme séparateur " "
et addictionner plutot les mots que les caractères

Driss

"Joel" a écrit dans le message de
news:44eabd32$0$866$
bonjour, je souhaiterais imprimer un string de longueur variables (pouvant
aller jusqua 400 carateres) mon probleme est que losque je l'imprime
(printer.print MaVariable) il imprime tous sur une ligne donc pas le


string
complet ou en dehors de l'imprimante, j'ai pourtant definit la largeur
d'impression de l'imprimante:
Printer.PaperSize = vbPRPSA4
Printer.ScaleMode = vbMillimeters
faut il decouper la chaine de caractere ou y a t'il plus simple, merci de
vos conseil.




Avatar
Joel DECOTIGNY
Merci pour vos reponse, je viens d'essayer ton code et sa fonctionne
parfaitement comme je le souhaitais, encore merci.
Dim maxi As Long
Dim combien As Long
Dim avance As Long
Dim texte_1 As String
Dim texte_2 As String
Dim o_s As String * 1
Dim o_n As Integer
Dim b As Long
texte_1 = Text1.Text ' texte : imp + transfert
maxi = Len(texte_1) ' lgr maxi texte
combien = 1
avance = 1
For b = 1 To maxi
o_s = Mid(texte_1, b, 1)
texte_2 = texte_2 + o_s
o_n = Asc(o_s)
If o_n = 13 Then: combien = 0
If combien > 64 And o_n = 32 Then
texte_2 = texte_2 + Chr(13)
texte_2 = texte_2 + Chr(10)
combien = 0
End If
combien = combien + 1
avance = avance + 1
Next b
Printer.FontName = "courier new"
Printer.FontSize = 8
Printer.Print texte_2
Printer.EndDoc
Avatar
X
De rien :o)

En fait, il faudrait améliorer la routine, elle ne tient pas compte de la
ponctuation espacée, qui normalement interdit un saut de ligne (type blanc
insécable), soit
; : ? !
Et il faudrait ensuite sur la chaîne, la justifier par ligne...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Joel DECOTIGNY" a écrit dans le message de
news: 44ed422a$0$879$
Merci pour vos reponse, je viens d'essayer ton code et sa fonctionne
parfaitement comme je le souhaitais, encore merci.
Dim maxi As Long
Dim combien As Long
Dim avance As Long
Dim texte_1 As String
Dim texte_2 As String
Dim o_s As String * 1
Dim o_n As Integer
Dim b As Long
texte_1 = Text1.Text ' texte : imp + transfert
maxi = Len(texte_1) ' lgr maxi texte
combien = 1
avance = 1
For b = 1 To maxi
o_s = Mid(texte_1, b, 1)
texte_2 = texte_2 + o_s
o_n = Asc(o_s)
If o_n = 13 Then: combien = 0
If combien > 64 And o_n = 32 Then
texte_2 = texte_2 + Chr(13)
texte_2 = texte_2 + Chr(10)
combien = 0
End If
combien = combien + 1
avance = avance + 1
Next b
Printer.FontName = "courier new"
Printer.FontSize = 8
Printer.Print texte_2
Printer.EndDoc



Avatar
Driss HANIB
la réponse de X ne marche que pour une taille et une police de caractère
données.
si tu veux modifier celles-ci il faut de nouveau chercher manuellement le
nombre de caractères maxi par ligne..

Driss

"Joel DECOTIGNY" a écrit dans le message de
news:44ed422a$0$879$
Merci pour vos reponse, je viens d'essayer ton code et sa fonctionne
parfaitement comme je le souhaitais, encore merci.
Dim maxi As Long
Dim combien As Long
Dim avance As Long
Dim texte_1 As String
Dim texte_2 As String
Dim o_s As String * 1
Dim o_n As Integer
Dim b As Long
texte_1 = Text1.Text ' texte : imp + transfert
maxi = Len(texte_1) ' lgr maxi texte
combien = 1
avance = 1
For b = 1 To maxi
o_s = Mid(texte_1, b, 1)
texte_2 = texte_2 + o_s
o_n = Asc(o_s)
If o_n = 13 Then: combien = 0
If combien > 64 And o_n = 32 Then
texte_2 = texte_2 + Chr(13)
texte_2 = texte_2 + Chr(10)
combien = 0
End If
combien = combien + 1
avance = avance + 1
Next b
Printer.FontName = "courier new"
Printer.FontSize = 8
Printer.Print texte_2
Printer.EndDoc




Avatar
X
Bonjour l'ami,

Tu me fais de la concurrence ???

Ben il suffit de modifier le nombre de caractères par ligne, mais de toute
façon, pour bien gérer ce genre de routine il faut une police à caractères
de taille fixes...

De mémoire tu proposes la gestion au mot, et non à l'octet, je ne crois pas
non plus que ce soit bon, car tu es obligé de repasser à l'octet pour gérer
la ponctuation espacée (ce que je ne fais pas ici)...

Je crois que tu sais un peu lire, si jamais tu lis des romans, voici
l'adresse de mon éditeur, c'est un excellent roman que je te conseil, il est
de ma plume...

http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm

Bonjour chez toi, je t'embrasse, bien à toi :o)

Joe.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Driss HANIB" a écrit dans le message de news:
%
la réponse de X ne marche que pour une taille et une police de caractère
données.
si tu veux modifier celles-ci il faut de nouveau chercher manuellement le
nombre de caractères maxi par ligne..

Driss

"Joel DECOTIGNY" a écrit dans le message de
news:44ed422a$0$879$
Merci pour vos reponse, je viens d'essayer ton code et sa fonctionne
parfaitement comme je le souhaitais, encore merci.
Dim maxi As Long
Dim combien As Long
Dim avance As Long
Dim texte_1 As String
Dim texte_2 As String
Dim o_s As String * 1
Dim o_n As Integer
Dim b As Long
texte_1 = Text1.Text ' texte : imp + transfert
maxi = Len(texte_1) ' lgr maxi texte
combien = 1
avance = 1
For b = 1 To maxi
o_s = Mid(texte_1, b, 1)
texte_2 = texte_2 + o_s
o_n = Asc(o_s)
If o_n = 13 Then: combien = 0
If combien > 64 And o_n = 32 Then
texte_2 = texte_2 + Chr(13)
texte_2 = texte_2 + Chr(10)
combien = 0
End If
combien = combien + 1
avance = avance + 1
Next b
Printer.FontName = "courier new"
Printer.FontSize = 8
Printer.Print texte_2
Printer.EndDoc








Avatar
Fred
dans : news:,
X écrivait :

Bonjour,

Ben il suffit de modifier le nombre de caractères par ligne, mais de
toute façon, pour bien gérer ce genre de routine il faut une police à
caractères de taille fixes...



Ben non. Driss utilise TextWidth qui permet de gérer les différences de
largeur de caractères, et de s'adapter à la largeur de la zone
imprimable quelque soit la taille de police utilisée.

De mémoire tu proposes la gestion au mot, et non à l'octet,



Hmm. Mémoire défaillante ? C'est cette gestion des mots qui manque
justement.

je ne crois pas non plus que ce soit bon, car tu es obligé de
repasser à
l'octet pour gérer la ponctuation espacée (ce que je ne fais pas
ici)...



C'est effectivement ce qu'il faudrait ajouter aux deux méthodes.

Je propose donc le principe suivant (parmi d'autres certainement):

Concaténer tous les caractères tant que la largeur (TextWidth) est
strictement inférieure à la largeur imprimable moins la largeur du plus
large des caractères de ponctuation espacée.
Si le dernier caractère de la chaîne ainsi obtenue est un espace, alors
vérifier que le caractère suivant n'est pas un des ces caractères de
poctuation espacée. Si oui, l'ajouter aussi et cela fait une ligne.
Sinon, enlever un à un tous les caractères de fin jusqu'à rencontrer un
espace ou un tiret (ou peut-être d'autres cas auxquels je n'ai pas
pensé). Et cela fait une ligne.


http://...../a.joseph-attila-pusztay.1.htm



Allez, un petit rappel (je ne me souviens plus où j'ai vu cela pour la
dernière fois) ;-)
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
X
Rajoute la justification, et la routine sera complète :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Fred" a écrit dans le message de news:

dans : news:,
X écrivait :

Bonjour,

Ben il suffit de modifier le nombre de caractères par ligne, mais de
toute façon, pour bien gérer ce genre de routine il faut une police à
caractères de taille fixes...



Ben non. Driss utilise TextWidth qui permet de gérer les différences de
largeur de caractères, et de s'adapter à la largeur de la zone imprimable
quelque soit la taille de police utilisée.

De mémoire tu proposes la gestion au mot, et non à l'octet,



Hmm. Mémoire défaillante ? C'est cette gestion des mots qui manque
justement.

je ne crois pas non plus que ce soit bon, car tu es obligé de repasser à
l'octet pour gérer la ponctuation espacée (ce que je ne fais pas
ici)...



C'est effectivement ce qu'il faudrait ajouter aux deux méthodes.

Je propose donc le principe suivant (parmi d'autres certainement):

Concaténer tous les caractères tant que la largeur (TextWidth) est
strictement inférieure à la largeur imprimable moins la largeur du plus
large des caractères de ponctuation espacée.
Si le dernier caractère de la chaîne ainsi obtenue est un espace, alors
vérifier que le caractère suivant n'est pas un des ces caractères de
poctuation espacée. Si oui, l'ajouter aussi et cela fait une ligne.
Sinon, enlever un à un tous les caractères de fin jusqu'à rencontrer un
espace ou un tiret (ou peut-être d'autres cas auxquels je n'ai pas pensé).
Et cela fait une ligne.


http://...../a.joseph-attila-pusztay.1.htm



Allez, un petit rappel (je ne me souviens plus où j'ai vu cela pour la
dernière fois) ;-)
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
Joel
bonjour, merci pour vos reponses mais la routine de X me convient
parfaitement, la taille des caracteres est fixe(12) et j'ai modifier donc le
nombre de caracteres a 80 et comme je l'ai dit c'est fixe, donc suffisant
pour se que j'en fait, bien sur y'a toujours mieux mais faut il en avoir
l'utilité.
encore merci a tous...

"Fred" a écrit dans le message de news:

dans : news:,
X écrivait :

Bonjour,

Ben il suffit de modifier le nombre de caractères par ligne, mais de
toute façon, pour bien gérer ce genre de routine il faut une police à
caractères de taille fixes...



Ben non. Driss utilise TextWidth qui permet de gérer les différences de
largeur de caractères, et de s'adapter à la largeur de la zone imprimable
quelque soit la taille de police utilisée.

De mémoire tu proposes la gestion au mot, et non à l'octet,



Hmm. Mémoire défaillante ? C'est cette gestion des mots qui manque
justement.

je ne crois pas non plus que ce soit bon, car tu es obligé de repasser à
l'octet pour gérer la ponctuation espacée (ce que je ne fais pas
ici)...



C'est effectivement ce qu'il faudrait ajouter aux deux méthodes.

Je propose donc le principe suivant (parmi d'autres certainement):

Concaténer tous les caractères tant que la largeur (TextWidth) est
strictement inférieure à la largeur imprimable moins la largeur du plus
large des caractères de ponctuation espacée.
Si le dernier caractère de la chaîne ainsi obtenue est un espace, alors
vérifier que le caractère suivant n'est pas un des ces caractères de
poctuation espacée. Si oui, l'ajouter aussi et cela fait une ligne.
Sinon, enlever un à un tous les caractères de fin jusqu'à rencontrer un
espace ou un tiret (ou peut-être d'autres cas auxquels je n'ai pas pensé).
Et cela fait une ligne.


http://...../a.joseph-attila-pusztay.1.htm



Allez, un petit rappel (je ne me souviens plus où j'ai vu cela pour la
dernière fois) ;-)
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Driss HANIB
Salut Fred
je retiens effectivement ta remarque sur les caractères de ponctuation
(tant qu'ils restent effectivement dans la zone imprimable..sinon on
enlèvera le mot complet..)

quant à l'ami X je connais déjà le 'loustic' qui s'est bien assagi mais qui
reste toujours de la même 'veine'.. donc je n'en tiens pas compte;
ce qui m'intéresse c'est de répondre à Joel..

ce X (qui veut se faire oublier des membres de cette liste) a toujours des
façon 'originales' et souvent non optimisées et non complètes pour répondre
à un problème posé.

Enfin.. il faut de tout pour faire un monde. et il permet de relativiser nos
petits soucis ;o))

Driss
"Fred" a écrit dans le message de
news:
dans : news:,
X écrivait :

Bonjour,

> Ben il suffit de modifier le nombre de caractères par ligne, mais de
> toute façon, pour bien gérer ce genre de routine il faut une police à
> caractères de taille fixes...

Ben non. Driss utilise TextWidth qui permet de gérer les différences de
largeur de caractères, et de s'adapter à la largeur de la zone
imprimable quelque soit la taille de police utilisée.

> De mémoire tu proposes la gestion au mot, et non à l'octet,

Hmm. Mémoire défaillante ? C'est cette gestion des mots qui manque
justement.

> je ne crois pas non plus que ce soit bon, car tu es obligé de
> repasser à
> l'octet pour gérer la ponctuation espacée (ce que je ne fais pas
> ici)...

C'est effectivement ce qu'il faudrait ajouter aux deux méthodes.

Je propose donc le principe suivant (parmi d'autres certainement):

Concaténer tous les caractères tant que la largeur (TextWidth) est
strictement inférieure à la largeur imprimable moins la largeur du plus
large des caractères de ponctuation espacée.
Si le dernier caractère de la chaîne ainsi obtenue est un espace, alors
vérifier que le caractère suivant n'est pas un des ces caractères de
poctuation espacée. Si oui, l'ajouter aussi et cela fait une ligne.
Sinon, enlever un à un tous les caractères de fin jusqu'à rencontrer un
espace ou un tiret (ou peut-être d'autres cas auxquels je n'ai pas
pensé). Et cela fait une ligne.


> http://...../a.joseph-attila-pusztay.1.htm

Allez, un petit rappel (je ne me souviens plus où j'ai vu cela pour la
dernière fois) ;-)
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



1 2