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é)

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
Merci .