Imprimer un formulaire

BORISDETOURS Messages postés 16 Date d'inscription dimanche 22 octobre 2017 Statut Membre Dernière intervention 10 novembre 2017 - 7 nov. 2017 à 10:18
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 15 nov. 2017 à 22:25
Bonjour à tous,
J'ai créé un formulaire que je souhaite imprimer.
Sous VB6 il existait un Print.Form qui était très simple mais qui est disparu avec CB.NET.
MSDN nous explique ça très bien et propose des équivalents mais hors de portée de mes faibles compétences (J'ai débuté en VB.NET il y 2 mois.)
J'essaie vainement de trouver l'équivalent mais mes nombreuses tentatives ont été un échec.
J'ai donc une Form que je souhaite passer à l'imprimante, j'ai trouvé le code pour l'imprimer, ça fonctionne très bien sauf que mon document est imprimé avec des marges de 3 cm et qu'une partie est tronquée.
Si l'un d'entre vous peut m'aider à finaliser mon impression ça me rendrai un service considérable, donc voici ma Form, j'ai de nombreux TextBox qui doivent être sur l'impression et un menu qui lui ne doit pas apparaître sur l'impression (que je peux rendre invisible avant d'imprimer) et un bouton "Imprimer" sur lequel je clique et hop ça sort à l'imprimante en A4 sans marges.
Merci de vos éventuelles propositions
Un détail, ça a l'air d'être compliqué car sur le forum j'ai vu plein de codes assez fantaisistes je les ais presque tous testé sans résultat.
BORISDETOURS

11 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
7 nov. 2017 à 13:21
Et si au lieu de poser 4 fois à peu près la même question, tu suivais un peu le sujet précédentes.
http://codes-sources.commentcamarche.net/forum/affich-10079930-parametrer-la-taille-d-un-document-imprime-avec-printform tu n’a jamais fait suite.
0
BORISDETOURS Messages postés 16 Date d'inscription dimanche 22 octobre 2017 Statut Membre Dernière intervention 10 novembre 2017
7 nov. 2017 à 17:59
Merci de ta réponse mais ta solution ne me conviens car pas adaptée à ma question. Toutefois mille excuses de ne pas t'avoir répondu en temps voulu mais j'avais un problème plus important en même temps concernant les fichiers et les bases de données, problème que j'ai pu régler il y peu.
A +
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
7 nov. 2017 à 21:09
Merci de ta réponse mais ta solution ne me conviens car pas adaptée à ma question.

Au contraire, tu veux
  • un A4
  • que les données écrites dans des Textxox soient imprimées (le cadre du textbox est il utile?)
  • que la présentation soit de tel sorte que ça ne déborde pas


Je t'ai proposé des solutions qui répondent parfaitement à ça, contrairement à l'impression "bête et méchante" d'un formulaire qui n'est pas forcément proportionné par rapport au A4, à qui il faut masquer des menus, le bouton imprimer, eventuellement les boutons de réduction, agrandissement et fermeture.

Après c'est toi qui voit, et je t'aiderai si tu choisis une de mes propositions, et pas dans le cas contraire car je ne sais pas.

Un autre conseil, ça fait 2 mois que tu essayes .Net, OK, mais il faut arrêter le plus vite possible de te dire je faisais ça comme ça, alors je vais faire pareil.
Ce sont deux langages très différents (malgré la filiation faussement suggérée par le nom). J'avais écrit un petit article là dessus, si tu veux y jeter un oeil, c'est là http://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
0
BORISDETOURS Messages postés 16 Date d'inscription dimanche 22 octobre 2017 Statut Membre Dernière intervention 10 novembre 2017
8 nov. 2017 à 09:14
Merci de tes explications, j'ai lu ton article qui résume bien la différence entre VB6 et VB.NET, et je suis assez d'accord sur le fait que ces 2 logiciels sont très différents bien qu'on pourrait penser à tort le contraire mais MICROSOFT nous a bien compliqué les choses (pourquoi faire simple quand on peut faire compliqué).
Il n'empêche que certaines fonctionnalités de VB6 étaient bien pratiques et que l'on pouvait faire certaines choses avec peu de code (comme par exemple indexer lesTextBox ou imprimer les Forms avec 3 lignes etc..), et qu'on ne retrouve pas sur VB.NET.
Donc, n'étant pas programmeur et n'envisageant pas de le devenir, (à 76 ans c'est compliqué), je fait ce que je peux.
J'ai réalisé sur VB6 et ensuite refait en VB.NET, un programme de devis à ma façon vu que ce j'ai trouvé sur le marché (la GESCOM de SAGE et EVATIC, d'autres existants mais plus basiques) sont faits pour des marchands de boutons mais pas pour une société de services (télésurveillance technique, courants faibles, contrôles d'accès, vidéosurveillance etc.).
Mon programme est surement loin d'être parfait et demande à être finalisé mais il fait exactement ce que je veux avec le bémol de l'impression pas à la page (pardon j'ai pas pu m'en empêcher).
Toutefois, sur le site MSDN j'ai trouvé quelques pistes intéressantes, mais c'est abominablement complexe donc je rame.
Toutefois d après vous je ne suis je ne suis pas obligé d'utiliser des TextBox, là je sèche, je peux regarder ça de prés mais encore faudrait-il que l'impression sorte correctement!
Encore une fois celle que je sort avec mon programme est parfaite au détail prés de la taille, est-il possible de la zoomer à la taille nécessaire?
A vous lire et encore merci de m'avoir accordé du temps.
0

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

Posez votre question
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
8 nov. 2017 à 10:00
comme par exemple indexer lesTextBox
ça ne sert plus à rien, se sont des objets présents au moins dans la collections Controls du formulaire, ce qui les indexes tout seul. Si tu veux faire une différentiation entre par exemple les textbox concernant le client et celles concernant le produit, tu peux te servir de la propriété Tag, ou mettre un suffixe dans le nom.
Une requête et tu as ta collection spécifique.
Dim lesTexboxAvecClientEnSuffixe As List(Of TextBox) = Me.Controls.OfType(Of TextBox)().Where(Function(t) t.Name.EndsWith("Client")).ToList()
Dim lesTextboxAvecClientDansLeTag As List(Of TextBox) = Me.Controls.OfType(Of TextBox)().Where(Function(t) t.Tag.ToString() = "Client").ToList()

Si la syntaxe de requettage te paraît trop complexe, tu peux simplement les mettre dans une collection
Dim listeDeTextbox As New List(Of TextBox)() From {textBox1, textBox2, textBox3}
Dim tableauDeTextBox() As TextBox = { textBox1, textBox2, textBox3 }


Mais là encore c'est penser VB6, le mieux (performance, lignes tapées soi même, conversion de type pris en charge, etc...) serait d'avoir un objet Client et un objet Produit et que les contrôles soit bindés (liaison dynamique ou presque tout est fait automatiquement) sur ces objets ou des collections.
Voir ce tuto
http://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Et en winform, c'est assez limité par rapport au WPF.


Quand à savoir zoomer pour imprimer ton formulaire, je ne sais pas faire, l'impression de Form j'ai abandonné dès mon premier programme en VB4, car je trouvais ça trop moche, et pas pratique.
Ca t'oblige à perdre de la place dans ton formulaire pour afficher par exemple les coordonnées de ta boite (au moment de faire ton devis, ça te sert à rien tu les connais), celles de ton chient (pendant l'édition à la limite seul son nom est utile) et inversement à planquer des trucs pour l'impression.

Faire un modèle sous word ou avec report viewer (qui existait déjà sous VB6, et p'tet même avant), me semble plus pertinent.
Tu places le logo de ta boite, les coordonnées, puis tu matérialises l'emplacement des coordonnées du client (ça sera rempli en comparant le nom dans le formulaire à ta base de données), ensuite tu disposes les emplacements des produits et des services, qui seront remplis en piochant les données issues du formulaire. Tu peux jouer plus facilement avec la mise en forme (police, couleurs, etc..) car ce sont des logiciels prévus pour.
Et le jour ou ton fils veut utiliser ton programme pour sa boite, tu n'es pas obligé de recompiler, tu modifies juste le modèle que tu lui donnes.
Alors ça fait serrement plus que 3 lignes de codes, mais celles là je peux t'aider à les écrire.

0
BORISDETOURS
9 nov. 2017 à 11:48
Bonjour Wismeril,
Je pense suivre ton conseil, je vais tout reprendre à zéro avec ta proposition en espérant que j'y parvienne.
Je te remercie de m'avoir accordé de ton temps.
Je te tiens informé de mon avancement.
BORISDETOURS
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
9 nov. 2017 à 17:47
Bonjour

Sans tout reprendre à zéro on peut dans un premier temps t’aider à faire un beau document avec ton logiciel en l’etat.

Fait un choix entre reportview et word, et on s’y attelle.


Mes premières logiciels en c# étaient mal codés (trop vb6....), j’en ai réécris certains et d’autres tournent toujours comme ca (un jour peut être), mais ils sont galères à maintenir (on est passé de xp et word 97 à W7 et word 2010 en 2013, plus rien ne marchait....)

0
BORISDETOURS
9 nov. 2017 à 21:09
Merci de tes conseils, j’ai déjà commencé à regarder comment travailler à faire des écritures et autres dans un doc Word depuis VB.Net.
Deuxième étape refaire mon formulaire bien plus simple avec 2 BDD (1 fichier client et 1 fichier articles) et qq cadres pour rentrer toutes mes données. Après on verra.
Je te tiens au courant.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
10 nov. 2017 à 07:29
Pour Word, le plus simple est de se servir de la librairie docx dont je t'ai parlé dans l'autre discussion.
Avant je me servais de l'API mais c'est plus long et plus lourd. Et les autres librairies gratuites que j'ai testées sont moins pratiques.
Je ne te conseilles pas d'essayer d'écrire directement en openxml (j'ai du m'y résoudre pour Excel), il faut déjà bien maitriser .Net et le xml.

avec 2 BDD (1 fichier client et 1 fichier articles)
si tu utilises vraiment une base de données, fait 2 tables plutôt que deux fichiers. Si tu utilises des fichiers, quel est leur type, je pourrais te conseiller sur les méthodes de parsage
0
BORISDETOURS Messages postés 16 Date d'inscription dimanche 22 octobre 2017 Statut Membre Dernière intervention 10 novembre 2017
10 nov. 2017 à 15:27
Rebonjour,
le ne sais pas si tu as reçu mon dernier message car j'ai eu des problèmes avec Microsoft Internet Edge, et je ne plus m'en servir.
J'ai mis Google par défaut et internet remarche.
Donc je te disais que j'ai essayé de faire avec Word, j'ai créé un projet et j'ai été cherché dans les références Microsoft Word 16.0 Object Library.
Hélas je n'ai que du rouge quant je cherche à rentrer du code, exemple :
Dim oWord as Word.Application et
Dim oDoc As Word.Document
Je n'ai pas encore trouvé pourquoi, pourtant les exemples de MSDN sont assez clairs.
Tu as peut-être une explication.Merci.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
10 nov. 2017 à 16:12
Là c’est l’api.
De mémoire il faut aussi mettre la référence à Microsoft.office.core ou un truc comme ça.
0
BORISDETOURS > Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024
15 nov. 2017 à 09:37
Bonjour,
Grace à tes conseils, j'ai bien progressé avec Word doc, j'arrive à faire mon en-tête et à la passer dans le document.
J'ai besoin de plusieurs choses sur lesquelles, malgré mes recherches je bute un peu :
Est-il possible de mettre une image dans un cellule de table.
Est-il possible de mettre une bordure à des cellules de table
Comment définir les marges du document Word depuis VB.NET
Peut-tu m'aider sur ces questions ?
Merci d'avance.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > BORISDETOURS
15 nov. 2017 à 16:05
Oui tout cela est possible.
Tu utilises toujours l’api?
0
BORISDETOURS > Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024
15 nov. 2017 à 19:01
Hum, c’est quoi l’api...
Je regarde ça demain matin.
Pour les marges, j’ai trouvé, problème réglé.
Pour les bords j’ai manipulé le code mais pas trouvé, j’ai essayé aussi de mettre de la couleur dans les cellules mais ça ne fonctionne pas.
Si tu as des solutions je suis preneur.
Merci d’avance.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > BORISDETOURS
15 nov. 2017 à 19:23
tu te sers de interop?
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
15 nov. 2017 à 22:25
Pour le tableau avec un image dedans, j'ai repris un vieux projet, que j'ai mis à jour
http://codes-sources.commentcamarche.net/source/51010-piloter-word-via-microsoft-office-interop-word

Prends la version VB.Net et lance le projet.
0
Rejoignez-nous