Bonjour a tous, j'ai besoin d'aide sur un code en VB, j'ai regardé plusieurs Forum mais aucun ne correspond précisément à mon type de problème.
Lors d'un clique sur un bouton, un PDF correspondant à un Devis d'un client se génère. Dans ce PDF, j'ai un Entête, le contenu du Devis et un Pied de page.
Tout s'écrit sur la même page au bon endroit. Seulement, j'aimerai qu'une deuxième page PDF se crée lorsqu'il y a plus de 13 lignes dans le contenu du Devis.
Je vous ai simplifier mon raisonnement dans le bout de code que je vous donne plus bas.
Le contenu d'un devis possède deux remplissages possible:
- Un Ensemble ou plusieurs (composé de sous ensembles) par exemple une "UNITE CENTRALE" avec ses sous ensembles tel que carte mère, RAM,...
- Des produits
Je vérifie a chaque fois si je dépasse pas 13 lignes.
Si je dépasse 13 lignes je veux passer à la page suivante et écrire les lignes restantes.
Voici le code de la fonction du bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Public Sub btn_devis_pdf_Click() Try Dim Verif_Presence As Boolean = False For Each files As String In My.Computer.FileSystem.GetFiles("Z:\Scan", FileIO.SearchOption.SearchTopLevelOnly) ' FileIO.SearchOption.SearchTopLevelOnly cherche uniquement dans ce dossier en excluant les sous-dossiers Dim Fi As New System.IO.FileInfo(files) ' Instanciation du fichier trouvé If (Fi.Name = "devis" & tbx_dev_code.Text & ".pdf") Then Verif_Presence = True My.Computer.FileSystem.DeleteFile(files) End If Next Traduction_Impression() Dim prdoc As New System.Drawing.Printing.PrintDocument() prdoc.PrinterSettings.PrinterName = "PDFCreator" AddHandler prdoc.PrintPage, AddressOf impression_PDF prdoc.DocumentName = "devis" & tbx_dev_code.Text Try prdoc.Print() MsgBox("Le fichier PDF a bien été créé et porte le nom : " & "devis" & tbx_dev_code.Text & ".pdf") Catch ex As Exception MsgBox("1) Vérifiez que PDFCreator est bien installé sur votre machine." & vbCrLf & "2) Vérifiez dans PDFCreator que l'enregistrement automatique est activé et configuré sur '<Title>'." & vbCrLf & "3) Vérifiez que votre répertoire 'Scan' est accessible.", MsgBoxStyle.Information, "CORTEX-GESTION - Impression PDF") End Try Catch MsgBox("Veuillez verifier qu'aucun document portant le nom " & "devis" & tbx_dev_code.Text & ".pdf ne soit ouvert et recommencez") End Try End Sub
Code du programme (simplifié)
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 Private Sub impression_PDF(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs) '*************************** '* Ecriture en contenu * '*************************** ' ======= RECUPERATION DU NOMBRE DE LIGNES ======= Obj_Command2.CommandText = "SELECT COUNT(*) AS NbreArt FROM LIGNE_DEVIS_CLIENT WHERE DEV_ID = " + tbx_dev_code.Text + "" Obj_Reader2 = Obj_Command2.ExecuteReader() Obj_Reader2.Read() Dim commande As String commande = Obj_Reader2.Item(0).ToString 'Instancier un objet Commande Obj_Command3 = New OleDbCommand() 'initialiser l'objet Command Obj_Command3.Connection() = laConnexionPrincipale 'requête pour affichage des articles Obj_Command3.CommandText = "SELECT COUNT(*) FROM LIGNE_DEVIS_CLIENT, ENSEMBLE, LIGNE_ENSEMBLE WHERE LIGNE_ENSEMBLE.ENS_ID=ENSEMBLE.ENS_ID AND LIGNE_DEVIS_CLIENT.ENS_ID=ENSEMBLE.ENS_ID AND LIGNE_DEVIS_CLIENT.DEV_ID=" + tbx_dev_code.Text + "" 'MsgBox(Obj_Command3.CommandText) Obj_Reader3 = Obj_Command3.ExecuteReader() Obj_Reader3.Read() Dim s_ens As String s_ens = Obj_Reader3.Item(0).ToString onversion String en Integer Dim commande1 As Integer commande1 = Integer.Parse(commande) Dim s_ens1 As Integer s_ens1 = Integer.Parse(s_ens) Nombre de lignes totales Dim tot As Integer tot = s_ens1 + commande1 'Détermine le nombre de pages Dim nbPages As Double = tot / 13 'Math.Ceiling permet de recupérer l'entier au dessus du double. Par exemple Math.Ceiling(2.54) = 3 nbPages = Math.Ceiling(nbPages) ' ======= FIN DE RECUPERATION DU NOMBRE DE LIGNES ======= 'Permet de savoir dans quelle page on se situe Dim indexPArcoursPages = 1 Obj_Reader2.Close() Obj_Reader3.Close() Dim compteur As Integer = 0 'Instancier un objet Commande Obj_Command = New OleDbCommand() 'initialiser l'objet Command Obj_Command.Connection() = laConnexionPrincipale 'requête pour affichage des articles Obj_Command.CommandText = "SELECT LIGNE_DEVIS_CLIENT.ENS_ID, ENSEMBLE.ENS_REF, ENSEMBLE.ENS_LIB, ENSEMBLE.ENS_TOTAL_HT, ENSEMBLE.ENS_REM, ENSEMBLE.ENS_TVA, ENSEMBLE.ENS_TOTAL_TTC, ENSEMBLE.ENS_QTE FROM LIGNE_DEVIS_CLIENT, ENSEMBLE WHERE LIGNE_DEVIS_CLIENT.ENS_ID=ENSEMBLE.ENS_ID AND DEV_ID=" + tbx_dev_code.Text + "" Obj_Reader = Obj_Command.ExecuteReader() Obj_Command3.CommandText = "SELECT ..." Obj_ReaderEnsemble= Obj_Command3.ExecuteReader() While (indexPArcoursPages <= nbPages) 'PArcours des Ensembles While Obj_ReaderEnsemble.Read() And compteur <= 12 If (ens <> " ") Then If (compteur = 13) Then compteur = 0 Exit While End If compteur = compteur + 1 'ECRITURE DE L'ENSEMBLE Obj_Command1.CommandText = "SELECT ..." Obj_ReaderSousEnsemble = Obj_Command1.ExecuteReader() 'PArcours des sous ensembles While Obj_ReaderSousEnsemble.Read() And compteur <= 12 compteur = compteur + 1 'ECRITURE DU SOUS ENSEMBLE DE L'ENSEMBLE End While Obj_Reader1.Close() End If End While 'Les produits While Obj_ReaderProduit.Read() And compteur <= 12 compteur = compteur + 1 'ECRITURE DU CONTENU DE TYPE PRODUIT If (compteur = 13) Then compteur = 0 Exit While End If End While 'Nous sommes revenu au début If compteur = 0 Then 'Saut de page pour écrire le reste ev.HasMorePages = True MsgBox("ev.HasMorePages = True -> On passe à une autre page") End If indexPArcoursPages += 1 End While Obj_Reader.Close() Obj_Reader3.Close() ev.HasMorePages = False End Sub.
Partager