Se reporter �galement � la rubrique Formulaires pour bien des astuces similaires
Dans la section d�tail, on installe des champs. Certains de ces champs sont num�riques. Il est possible, plut�t que d'avoir le contenu du champ, d'avoir le cumul de ses valeurs depuis le d�but de l'�tat.
Le cumul est une propri�t� du champ lui-m�me, et son comportement va changer selon le tableau suivant
Exemple :
Valeur de Cumul : | Non (Normal) | En continu | Par Groupe | |
Janvier | ||||
Pommes | 4 |
4 |
4 |
|
Poires | 8 |
12 |
12 |
|
Bananes | 3 |
15 |
15 |
|
F�vrier | ||||
Pommes | 7 |
22 |
7 |
|
Bananes | 10 |
32 |
17 |
Une excellente astuce de cumul pourrait servir � num�roter les lignes des �tats. Pour ce faire, il suffit d'installer dans le d�tail une zone d'�dition Ab, et d'y indiquer =1. Ensuite on d�finit simplement Cumul � "En continu" de cette zone.
Si on avait d�fini le cumul par groupe, on aurait une num�rotation qui recommen�ait � chaque changement de donn�es dans le groupe.
Exemple :
DoCmd OpenReport "E_NomDeLEtat", A_DESIGN ' Ouverture en
modification
Etats![E_NomDeLEtat].NomDePropri�t� = AttributNomDePropri�t� ' Changement d'une
propri�t�
SendKeys "{ENTER}" ' Envoi de ENTER pour confirmation de la bo�te de
dialogue de confirmation de changement de propri�t� qui suit
DoCmd Close A_REPORT, "E_NomDeLEtat" ' Fermeture de la conception
DoCmd OpenReport "E_NomDeLEtat", A_PREVIEW ' R�ouverture en
visualisation
Il est possible de dessiner par programmation dans un �tat. Ici, nous allons dessiner des lignes (et des rectangles par extension)
Admettons que dans chaque d�tail, nous d�sirons ins�rer un rectangle, il faut mettre l'instruction LINE dans l'�v�nement AuFormatage du d�tail :
Me.Line (1, 10)-(100, 1000), 255, B
Explication des param�tres :
Me.Line (A, B)-(C, D), E, F
A : Si A vaut 1, alors le rectangle commencera compl�tement � gauche de l'�tat. S'il vaut plus, il commencera de plus en plus � droite
B : Si B vaut 1, alors le rectangle commencera compl�tement contre le haut de la section dans laquelle le code est ins�r�. S'il vaut plus, il commencera de plus en plus bas.
C : Si C vaut 1, alors le rectangle se terminera compl�tement � gauche de l'�tat. S'il vaut plus, il se terminera de plus en plus � droite. Il est idiot de mettre C � 1, puisque la coordonn�e A est d�j� sens�e repr�senter cette valeur
D : Si B vaut 1, alors le rectangle se terminera compl�tement contre le haut de la section dans laquelle le code est ins�r�. S'il vaut plus, il se terminera de plus en plus bas. M�me commentaire que pour C
E : Couleur du pourtour du rectangle. Elle peut-�tre exprim�e sous la forme RGB(255,0,0) - (pour du rouge par exemple)
F : Si F est repr�sent� par la lettre "B", le rectangle sera vide. Si F est repr�sent� par "BF", il sera plein (ne pas mettre les guillemets)
Une application fort int�ressante serait de cr�er des rectangles color�s de tailles diff�rentes, relatives au nombre d'articles d'une certaine cat�gorie par exemple.
Imaginons une table des fruits avec diff�rents noms de fruits, chaque fruit faisant partie d'une cat�gorie de fruits (Pomme, poire, etc.)
Private Sub GROGenreFruit_Format(Cancel As
Integer, FormatCount As Integer)
Me.ScaleMode = 3
Me.Line (1, 1)-(EDICompteFruit * 10, 30), 255, BF
End Sub
Pour ne pas afficher les r�gles verticales et horizontales en mode cr�ation, on peut faire AFFICHAGE/OPTIONS/CREATION DE FORMULAIRE-D'ETAT et AFFICHER LES REGLES
sans avoir besoin de les red�finir � chaque �tat, il faut aller (en mode cr�ation) dans AFFICHAGE/OPTIONS/IMPRESSION
Il faut se mettre en mode APERCU AVANT IMPRESSION, aller dans FICHIER/CONFIGURATION DE L'IMPRIMANTE, changer ce qu'on veut changer, faire OK, et faire CTRL-S.
Access 2 :
Il faut aller dans FICHIER/CONFIGURATION DE L'IMPRIMANTE/AUTRE>> et NOMBRE DE COLONNES : ce qu'on veut et ne pas oublier DISPOSITION VERTICAL
Access 97 :
Fichier/Mise en page/Colonnes
Dans le cas ou le contenu d'une section d�passe la taille restante d'une page ou d'une colonne, il est possible d'exiger sa r�p�tion (pour rappel) sur la page ou la colonne suivante (une seule propri�t� pour les deux choses). Marche � suivre :
Dans la propri�t� du groupe concern� : Mettre R�p�ter section � Oui
Du code qui est plac� sur l'�v�nement "Au formatage" d'un groupe sera ex�cut� � chaque impression ou visualisation d'un nouveau groupe. Par exemple, lorsqu'on clique sur le bouton pour aller visualiser la page suivante, et que sur cette page suivante, il y a 3 groupes, le code sera ex�cut� 3 fois de suite
Exemple :
Cet exemple permet d'�crire la ligne courante dans une couleur diff�rente de la pr�c�dente
Private Sub ETADetail_Format(Cancel As
Integer, FormatCount As Integer)
Static Ctr
Ctr = Ctr + 10000
ETADetail.BackColor = Ctr
End Sub
Si on voulait par exemple que chaque nouvelle section commence en haut d'une nouvelle colonne, il faut faire comme ceci :
- S�lectionner l'en-t�te de groupe concern�
- Demander la propri�t� NvLig ou col : avant Section
Si on fait glisser un saut de page juste au dessus d'un texte de titre de section, on obtient effectivement le titre en haut de chaque page, mais �galement juste avant le premier titre, ce qui fait que la premi�re page est blanche. Une solution en VB est compliqu�e (voir VB : Supprimer un saut de page seulement sur la premi�re page). Il existe une solution tout � fait simple et pratique : Demander les propri�t�s de la sectioon au dessus de la quelle vous voulez un saut de page, et d�finissez Saut de page : avant section. (Apr�s section placera le titre en dessous de chaque page suivi d'un saut de page ... Inutile), et Avant & Apr�s section isolera les titres sur une page � part : ce qui peut �tre utile parfois pour des �tats extr�mements gros
Il est possible de d�terminer par programmation dynamiquement ce qui peut se passer dans une certaine section. Par exemple, on pourrait ins�rer un saut de page dans une certaine section de regroupement, mais on ne d�sire pas ce saut de page dans le premier groupe (pour une raison quelconque)
Il faut donc installer d'abord le saut de page dans la section comme si de rien n'�tait, et ensuite, il faut pouvoir le d�sactiver seulement sur la premi�re section. Pour d�sactiver un saut de page, il faut mettre sa propri�t� Visible � False.
Voici donc le code � installer dans l'�v�nement "Au formatage" de la section d�sir�e
Private Sub Ent�teGroupe0_Format(Cancel As
Integer, FormatCount As Integer)
If Page = 1 Then
SautPage.Visible = False
Else
SautPage.Visible = True
End If
VARSautPage = 1
End Sub
MoveLayout
Dans le cas ou on d�sire un �tat avec des sections principales et un d�tail, il arrive que l'on ait � imprimer les sections principales alors qu'il n'y a pas de d�tail correspondant. C'est possible, mais le probl�me est que l'�tat prend de toute fa�on au moins une ligne de d�tail vide lors de l'impression. Pour �viter cette perte de place inutile, voici ce qu'il faut faire : (J'ai pris l'exemple d'un �tat qui imprime tous les clients d'Info 3000, accompagn�s de toutes les personnes qui travaillent dans ces entreprises clientes).
Nous allons utiliser la propri�t� MoveLayout, disponible uniquement par programmation. Il faut ins�rer le code suivant dans l'�v�nement AuFormatage de la section de d�tail
If IsNull(NomPersonneContact) Then
Me.MoveLayout = False
Else
Me.MoveLayout = True
End If
Si on ne dit rien, Access va afficher les �tats de fa�on � ce qu'un en-t�te de groupe ne soit pas forc�ment sur la m�me page que les d�tails qui le composent. Pour rem�dier � cela, il faut aller dans AFFICHAGE/TRIER ET REGROUPER, choisir le groupe qui doit appara�tre de fa�on homog�ne sur une seule page, et choisir SECTION INSECABLE/GROUPE ENTIER.
la semaine commence au lundi et se termine le dimanche
Il est possible que l'on doive cr�er un �tat se composant de plusieurs tables, mais que certains champs de tables diff�rentes portent le m�me nom. Dans ce cas, il est bien s�r possible de placer les diff�rents champs s�par�ment sur l'�tat, et ceux ci seront alors pr�c�d�s d'un point et du nom de la table d'origine, mais lorsqu'il s'agit de les concat�ner en un seul champ, avec &, c'est impossible. La seule solution consiste � baser l'�tat sur une requ�te, laquelle poss�de des titres de colonnes comme des expressions concat�n�es contenant les champs des 2 tables :
Dans ce exemple, j'ai une table T_Client, li�e avec elle-m�me (pourqu'un client puisse avoir un client responsable de lui). Comme je n'arrive pas � concat�ner l'IDClient, Nom et pr�nom dans une seule case, dans ma requ�te, je pr�pare le terrain comme ceci :
Responsable: [t_client].[idclient] & " " & [t_client].[nomclient] & " " & [t_client].[prenom]
Gr�ce � la m�thode Print (Me.Print), il est possible d'�crire du texte dans n'importe quelle partie de l'�tat.
Exemple 1 :
Cet exemple permet de num�roter les enregistrements les uns � la suite des autres. Le m�me r�sultat peut �tre obtenu gr�ce � la propri�t� d'une zone Ab
Private Sub D�tail_Format(Cancel As
Integer, FormatCount As Integer)
Static Ctr
Ctr = Ctr + 1
Me.Print Ctr
End Sub
Pour se permettre d'�crire plusieurs lignes, on peut bien s�r utiliser plusieurs fois de suite la m�thode Print, mais par contre, on constate que il garde la position verticale ou il �tait � la ligne pr�c�dente. Ainsi
Me.Print "Ok"
Me.Print "Ok2"
Ne fonctionnerait pas (ne s'allignerait pas), par contre
Me.Print "Ok"
Me.CurrentX = 0
Me.Print "Ok2"
Donnerait un r�sultat parfaitement convaincant. Mais… Il faut bien pr�voir suffisamment de place en hauteur dans la section pour pouvoir �crire plusieurs lignes avec Print, car sinon, le texte est tronqu�. Je pensais qu'en d�finissant la propri�t� de la section � AutoExtensible : Oui, �a r�glerait le probl�me, mais en fait, non…