C'est comme de le pagination à part que c'est pour l'impression

Description

vous choisissez le nombre d'enregistrement à ne pas dépasser par page, et ça vous imprime ici sous forme de tableau, un tableau par page qui n'est pas coupé en fin de page en fin les problèmes de mise en page pour l'impression habituels quoi!

Pas besoin d'ouvrir la fenêtre du choix d'imprimante, elle s'ouvre toute seule.

Source / Exemple :


<!--
Auteur Jessie
J'ai bien détaillé le code, exprès pour les Newbies
Pour les personnes plus avancés, vous passez certains commentaires
trop détaillés.
J'espère que ça vous aidera, je n'ai pas trouvé de source parlant de la 
mise en page pour l'impression, avec un tableau qui reprend des données 
d'une table.

Dernière chose
J'ai limité à 18 enregistrements par tableau, par ce que pour mon cas
il n'en tenait pas plus.

Sachant aussi qu'il faut jouer avec les marges, je vous conseille de vous intéresser
Au CSS.
Si Questions, vous savez où me joindre.

-->

<!--#include file="../../BD/connexionbase.asp"-->
<%
Dim strSQL29
'*****************************************************************************
'* On cree sa requete SQL (ici c'est la mienne, mettre bien entendu la votre)*
'*****************************************************************************

   StrSQL29 = "SELECT Sum(CONGES.Nbre) AS SommeDeNbre, admin.ID1, admin.Fonction, Groupe.Services, CONGES.DateDeb, CONGES.DateFin, Month(CONGES.DateFin) AS MOIS, Year(CONGES.DateFin)As Expr2, CONGES.Nature, CONGES.Valider, CONGES.Refus, CONGES.IDConges, CONGES.DEM, admin.nom, admin.prenom FROM Groupe INNER JOIN (admin INNER JOIN CONGES ON admin.ID1 = CONGES.ID1) ON Groupe.Groupes = admin.SERVICE1 GROUP BY admin.ID1, admin.SERVICE1, Groupe.Groupes, admin.Fonction, Groupe.Services, CONGES.DateDeb, CONGES.IDConges, CONGES.DEM, CONGES.DateFin, CONGES.Nature, CONGES.Valider, CONGES.Refus, admin.nom, admin.prenom HAVING Groupe.Services = '"&request.querystring("Serv")&"' AND Month(CONGES.DateFin)="&request.querystring("mois")&" AND CONGES.Valider=True ORDER BY DateDeb DESC;"
   
   SET rs = Server.CreateObject("AdoDB.RecordSet")

'************************************************************
'* Récupération des informations du select dans un RecordSet*
'************************************************************ 

      rs.Open strSQL29, conn,3,3 
      

%>
<HTML>
<HEAD>
<!--
Ici c'est ma ligne pour ma feuille de style, donc si vous en avez pas
enlever la 1 ere ligne ci dessous (<link rel etc...>)
-->   
<link rel = "stylesheet" type = "text/css" href = "../../CSS/Absences_Print.css">

<TITLE>Tableau récapitulatif des Absences par Services pour le Mois de <%=request.querystring("mois")%></TITLE>   
<!--
Petit code que j'ai trouvé sur un site
qui permet de revenir à la page précedente
une fois que l'on a imprimé au bout 5000 millisecondes
elle revient à la page précèdente.
-->

 <!-- DEBUT REMOVE PRINT-->
<!--http://www.javascriptkit.com/-->
<script language="JavaScript">

function revertback()
{
setTimeout("history.go(-1)",5000)
}
window.onafterprint=revertback

</script>
<!-- FIN REMOVE PRINT-->
</HEAD>  

<!--
La ligne ci dessous permet de charger votre page
avec la fenetre de l'impression qui s'ouvre automatiquement
donc si vous ne voulez pas, mettre un <Body> tout simple
-->  
<BODY OnLoad = "window.print()"> 
 
<%
'****************************************
'*Le rs.pagesize permet de limiter	*
'*le nombre d'enregistrement sur ma page*
'*ici c'est 18 enregistrements		*
'**************************************** 
 
 rs.pagesize = 18
 
'******************************************************************************
'*Si vous enlevez la ligne "response.write..." du commentaire, ça vous donnera*
'*le nombre de page qui dépend du nbre d'enregistrement par page (ici 18),    *
'*et le nbre d'enregistrement total qui dépend de votre requête.  	      *  
'*response.write rs.pagecount& " " &rs.recordcount& " 		              *
'******************************************************************************

'************************************
'*Limite à ne pas dépasser	    *
'*c'est le total des enregistrements*
'*de ma requête			    *
'************************************

LimiteFin = rs.recordcount

'******************************************************************
'*Si il n'y a pas d'enregistrement ma petite fonction Validation()*
'*ouvre une boite de dialogue Vbscript donc vous devez remplacer  *
'*cette ligne par ce que vous voulez.				  * 
'*Exemple: response.write "C'est vide"				  *
'******************************************************************

If rs.EOF and rs.BOF then

	response.write "<Script language='VBScript'>Validation()</SCRIPT>"
else
	
'**********************************************************
'*On commence la 1ère boucle qui permet de passer le total*
'*des enregistrements					  *
'**********************************************************

For i = 0 to LimiteFin

%>
 
<!--
Attention si vous laissez le titre dans la boucle ainsi que
les En-Têtes de colonne, vous aurez un tableau avec un titre
sur chaque feuille et les En-Tête de chaque colonne aussi
Mais moi je trouve que c'est plus claire d'avoir le titre et
le tableau complet qui se répète sur chacune des feuilles
--> 
  
 <H1>Tableau récapitulatif des Absences par Services pour le Mois de <%=Ucase(t)%></H1>
 
  
 <DIV>
 
<!--
Commencement du tableau 
Enlever toutes les ( class="table1", etc.. ) (c'est pour ma feuille de style CSS)
ou créer une feuille de style
Si vous ne savez pas ce qu'est une feuille de style, regardez sur le net 
--> 

    <TABLE class="table1"> 
    
    <!--En-Tête du tableau-->                
 		<TR>    
			<TH class="histo">Utilisateurs</TH>
			<TH class="histo">Services</TH>
			<TH class="histo">Date de Debut</TH>
 			<TH class="histo">Date de Fin</TH>
 			                
	               
		 </TR>   
  
 <%
'*****************************************************
'*2ème boucle imbriquée dans la 1ère qui va permettre*
'*de limiter le nbre d'enregistrement à (ici 18) par *
'*page						     *
'*****************************************************

	For x = 1 to rs.pagesize

'****************************************
'*Corp de mon tableau avec récupération *
'*des variables de ma requête, donc à   *
'*changer avec les votres.		*
'****************************************

   %> 
   
                  
   <TR class="histo">
     <TD class="histo"><%= Ucase(rs("Nom"))%>&nbsp;<%=Ucase(rs("Prenom"))%></TD>
     <TD class="histo"><%= Ucase(rs("Services"))%></TD>
     <TD class="histo"><%= rs("DateDeb") %></TD>
     <TD class="histo"><%= rs("DateFin") %></TD>
   </TR> 
   
<%

'*************************************
'*Je passe à l'enregistrement suivant*
'*************************************
rs.movenext

'*************************************
'*Si plus d'enregistrement on sort de*
'*la 2ème boucle		     *
'*************************************

If rs.eof Then Exit for

'*********************************
'*autrement on continue la boucle*
'*********************************

Next

'****************
'*Fin de Tableau*
'****************
%>       	
</TABLE></DIV>

<%

'*************************************
'*Si plus de page on sort de pages   *
'*on sort de la 1 ère boucle	     *
'*************************************

If rs.eof Then Exit for

'***********************************************************************
'*Si encore des pages on génère un saut de page, ici(<Br class='saut'>)*
'*c'est ma feuille de style CSS, Vous, vous remplacez par	       *
'*<Br style='page-break-after = always;'>, si pas feuille de style     *
'*Ca vous permet d'avoir un tableau par page			       *
'***********************************************************************
If not Rs.EOF then
response.write "<Br class='saut'>"
End If

Next

'**********************************************
'*Je ferme mon premier "If" vous vous souvenez*
'*apres le BODY.			      *
'**********************************************
End If

'****************************************
'*Et pour finir je cloture mon recordset                  *
'*et je le vide			               *
'****************************************
	
rs.close
Set rs = Nothing	
%>

  </BODY> 
 <!--#include file="../../BD/deconnexionbase.asp"-->  	 

 </HTML>

Conclusion :


J'ai bien détaillé le code, exprès pour les Newbies
Pour les personnes plus avancés, vous passez certains commentaires
trop détaillés.
J'espère que ça vous aidera, je n'ai pas trouvé de source parlant de la
mise en page pour l'impression, avec un tableau qui reprend des données
d'une table.

Dernière chose
J'ai limité à 18 enregistrements par tableau, par ce que pour mon cas
il n'en tenait pas plus.

Sachant aussi qu'il faut jouer avec les marges, je vous conseille de vous intéresser
Au CSS.
Si Questions, vous savez où me joindre.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.