Problème récupération de données dans un fichier .txt + problème impression par

Résolu
DJMAX360 Messages postés 8 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 17 février 2008 - 11 févr. 2008 à 17:48
DJMAX360 Messages postés 8 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 17 février 2008 - 12 févr. 2008 à 22:07
Voici mon gros problème...

Je suis débutant sous VB,et sur ce forum,  et voici mes 2 problèmes:

1er-)

j'enregistre le contenu de textbox et les récupère de la facon suivante:

Private Sub Command2_Click()
Open App.Path & "\dossier1" & "essai.txt" For Input As #1
Input #1, texto1
Input #1, texto2
Input #1, texto3
Input #1, texto4

Text1.Text = texto1
Text2.Text = texto2
Text3.Text = texto3
Text4.Text = texto4

cela "fonctionne",  mais des que je met une virgule dans ma texbox suivi de texte,le texte se retrouve en textbox 2 quand je recharge ma feuille, comment dois-je enregistrer le contenu de mes texbox dans un fichier texte sans avoir ce problème.

Maintenant 2ème problème

j'imprime  avec printer.print text1 ...

Je dois imprimer le contenu de text box

problème1

Si je met des textbox multilignes et que je rentre 170 cararctère dans ma textbox , ils se mette sur la 1ère ligne et quand j'inmprime la moitié de mon textbox se trouve en dehors de la feuille, ...

je suppose que en réglant mon premier problème d'enregistrement, le second devrai s'arranger,

le troisième problème c'est que je fait ce projet pour un TFE et que mon délai commence à être vachement dépassé, est-ce que parmis vous un courageux pourrai passer quelques minutes à expliquer à un débutant comment doit-il faire.

un grand merci d'avance

nouvel utilisateur

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 févr. 2008 à 18:47
Salut
Même débutant, si tu avais un peu lu les questions du forum ou un peu l'aide de VB, tu aurais vu qu'il faut utiliser Line Input # et pas Input # seul.
Les deux fonctionnent, sauf le deuxième (lol), en fait le deuxième considère que tu as stocker des variables et la première syntaxe considère que tu as stocké des lignes.

Pour l'impression, oui, c'est normal, c'est à toi de gérer la taille de ce que tu imprimes.
Il faut donc que tu calcules la largeur de ton texte en fonction de :
- sa police
- sa taille
- sa longueur
Ceci peut être fait avec Me.TextWidth après avoir donné à Me (ta forme), les attributs de police et taille avec lesquels tu vas imprimer.
A partir de cette taille, tu sauras si tu as besoin ou pas de couper ton texte.
Pour savoir à quel caractère il faut couper, il te suffit de faire une boucle For-Next sur la longueur du texte : dès que la taille fournie par TextWidth dépasse la largeur de ta page d'impression (de mémoire Printer.Width), suffit de couper et de garder le reste du texte pour la prochaine ligne.

Désolé pour ton TFE, fallais s'y prendre plus tôt.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 févr. 2008 à 21:58
Re
Il va falloir jouer avec les boucles For-Next en cascade.
Une ligne de TextBox ne te garantit pas qu'elle puisse être imprimée sur la largeur de ta page.
Il te faut donc :
- connaitre la largeur de la page d'impression (Printer.Width ou PageWidth ?)
- faire une boucle de test des premiers caractères (Left) jusqu'aux derniers de ta ligne pour savoir si la longueur (Printer.TextWidth) de ce début de texte, plus le décalage d'origine 2000 que tu lui imposes, ne dépasse pas la largeur de ta page d'impression.
- Si, dans ta boucle, tu as atteint cette largeur maxi avant le dernier caractère, il faudra donc :
   - Imprimer ces premiers caractères
   - se décaler vers le bas (de Printer.TextHeight au minimum)
   - recommencer la boucle for-next avec les caractères restant (ceux qui n'ont pas été imprimés)
   etc
Donc, tout est affaire de boucle, de test de largeur de texte (Printer.TextWidth) ...
Voilà, tu as les pièces du puzzle.
Ce n'est pas très compliqué, suffit de savoir manipuler les chaines, de savoir récupérer les caractéristiques d'impression et d'un peu de logique.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 févr. 2008 à 22:00
PS :
Line input #  va de pair avec  Print #  et pas  Write #  qui va t'insérer des " devant et derrière.
As-tu regardé l'aide de VB6 ? ou la foultitude d'exemples de manipulation de fichiers parmi les codes de vbfrance ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
DJMAX360 Messages postés 8 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 17 février 2008
11 févr. 2008 à 18:59
Peu apres avoir posé la question j 'ai vu qu'il était aussi possible de le faire avec cette technique (integer au lieu de string)

dim NumFile as integer
NumFile=FreeFile
open "c:\toto.txt" for output as #NumFile
write #numfile, text.text
close

quel est le mieux line input ou cette technique,

merci beaucoup de ton aide en tout cas

pour l'impression j'imprime le contenu de mes texbox, mais étant donné que j 'ai des textbox multiligne,... je n'y arrive pas

le problème c'est que je dois définir le current x et current y mais si il ya  7 lignes à ma textbox l'ensemble est reculéet dessend, puis certaint utilisateur peuvent passer 3 espaces et mettre du texte en dessous, mais comment faire gérer ca à l'imprimante
jusque maintenant j'ai trouvé un système pas trop mal mais au bout de 5 textbox même pas 2 ca devient scabreux

 'récupère chaque ligne dans un tableau
   s() = Split(Text1(0).Text, vbNewLine, , vbBinaryCompare)
On Error Resume Next
For X = 0 To 10
If s(X) = "" Then
Printer.CurrentY = Printer.CurrentY
Else
Printer.FontSize = 12
Printer.CurrentX = 2000
Printer.CurrentY = Printer.CurrentY + X * 300
Printer.Print s(X)
End If

aussi, je ne sais pas comment lui dire de continuer sur la page 2 je suppose qu'il faut le définir aussi

Voila, merci, et même grand merci à ceux qui prenne encore la  peine de répondre au boulet de service.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DJMAX360 Messages postés 8 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 17 février 2008
12 févr. 2008 à 22:07
j'ai la solution ==> pour la mémorisation de mes text box je les met dans ma base de donnée dans des champs memo

et pour l'impression je vais créer des fichier word prédéfini avec des variables et je vais rentrer mes variables dans mes fichier word, comme ca il est cor possible à la personne qui va utiliser le programme de changer quelques petit détails avant l'impression

le seul problème est que mon prof aimerai que je le fasse fonctionner à partir de plusieurs machine, comment dois-je faire???

lui m' as dit que partager la base de données "sous access" sur une machine "serveur" et pour les client créer des lecteur réseau et changer le chaemin d'accès dan mon programme

est-ce possible que ca fonctionne ?? oui , non ?

merci beaucoup en tout cas d'éclairer la triste lanterne

et bonne soirée a toi
0
Rejoignez-nous