On peut vous aider ?
Cherchez des réponses ou parcourez les rubriques de notre documentation
Motif
{:fr}Le Motif est un compartiment qui permet d’organiser les composants qui lui sont rattachés à la manière d’une table :
- Il définit la structure d’un enregistrement
- Il peut se voir ajouter ou retrancher des enregistrements.
Le motif est utilisé dans les formulaires pour lesquels le nombre d’informations à présenter et/ou à saisir varie suivant les entités, que ce nombre soit défini en central ou bien que les entités ajoutent ou retranchent des enregistrements.
Syntaxe
Le motif doit être déclaré dans la zone d’import de la matrice de formulaire avec la syntaxe suivante :
GTMOTIF (Name ; Base_Pattern ; [Flags ; [GTCLE (Message clé doublon ; Message clé invalide; Cellule1; …; CelluleN) ; [Initial_range]])
- Name : le nom du motif. Ce nom doit être unique pour tout le formulaire, il ne peut pas être vide et doit commencer par [A-Za-z]. Les caractères accentués ne sont pas autorisés.
- Base_Pattern : la plage de cellule qui sera dupliquée. Cette plage peut comporter autant de lignes que désiré
- Flags est une chaîne qui contient les options du motif via des flags (séparé par des points virgules):
- “ALL” correspond à toutes les options à VRAI
- “NONE” correspond à toutes les options à FAUX
- “A” le destinataire peut ajouter des lignes
- “S” le destinataire peut supprimer des lignes
- “H” booléen indiquant si les hauteurs de lignes sont préservées (en-dessous) et dupliquées (à l’intérieur) (FAUX par défaut)
- “T” le destinataire peut trier les données (FAUX par défaut)
- “F” le destinataire peut filtrer les données (FAUX par défaut)
- “V” le destinataire peut autoriser une seule ligne vide malgré les contraintes obligatoires (FAUX par défaut)
- GTCLE : une plage de cellules dont les valeurs concaténées doivent être uniques pour un élément du motif. La clé est vide par défaut. Dans la macro GTCLE, les messages peuvent être des formules. Les cellules doivent nécessairement contenir un composant.
- Initial_Range : la plage initiale, qui doit être un multiple de Base_Pattern. Si le motif n’est pas alimenté en données, il affichera autant d’enregistrements que la plage initiale. La plage initiale peut être égale au pattern de base mais avoir au minimum deux lignes de plage initiale permet de définir une bordure différente à l’intérieur des cellules. Attention, la plage initiale définit également le nombre minimal de lignes dans la réponse.
Notes :
- Le pattern de base et la plage initiale doivent correspondre (aussi bien en taille que vis-à-vis des cellules fusionnées, les autres styles sont ignorés, seuls ceux du pattern de base sont importants).
- Le domaine du motif (i.e. les cellules en dessous) ne doit traverser aucune cellule fusionnée en-dessous (à cause du décalage de cellules).
- Si un motif est en dessous d’un autre motif ; les bornes droite et gauche de ce dernier doivent être contenues dans celles du motif au-dessus (à cause du décalage de cellules).
- Seul le pattern de base peut contenir des composants et il doit en contenir moins un.
- Il n’est pas possible de créer le motif dans Design
Exemple
- La plage B3:E3 est le pattern de base.
- Le champ « Filiale » en B3 sert de clé
- la cellule E3 contient une formule avec GTCONTROLE d’où l’erreur #NOM? dans Excel. Elle contient la formule =C3*D3
- remarquez que la ligne 4 a une hauteur différente de la ligne 3.
- la ligne 5, vide, est obligatoire si on veut faire des agrégations dans un « footer » (ici, en vert). Ici, la cellule C6 contient la formule =SOMME(C3:C5) qui donnera la somme de la colonne C du motif. Cette ligne peut être cachée si l’option du motif « Ajuster les hauteurs de lignes » est VRAI (c’est le cas ici).
Ajout/Suppression d’enregistrements à l’exécution
Dans GTAnswer, un bouton d’information « i » permet d’afficher le menu contextuel pour ajouter/supprimer des lignes de motif :
Notez qu’il n’est pas possible de saisir de données dans la ligne 4, celle-ci ne contenant aucun composant.
Après insertion, voici le résultat obtenu :
Lors de l’insertion d’un enregistrement, le document va:
- Décaler les cellules vers le bas, ce qui implique la translation de toutes les formules faisant référence à des cellules situées en-dessous de l’insertion (i.e. de toutes les cellules qui « bougent ») : C’est ici qu’intervient la ligne 5 laissée vide dans le modèle Excel. La formule qui était en C6 est maintenant en C7 et vaut =SOMME(C3:C6). Pour un détail sur les formules dans les motifs, voir le paragraphe concerné.
- Copier tous composants et tous les styles du pattern de base dans les nouvelles cellules créées (format de cellule, format de nombre, mise en forme conditionnelle, commentaire, etc…).
- Etendre les formules du pattern de base dans les nouvelles cellules (identique au « tirer les formules » d’Excel).
- Si le motif a la propriété AdjustRowsHeights à VRAI, les hauteurs de lignes en dessous sont décalées et la hauteur de la première ligne du motif est copiée dans la ligne en cours. Si AdjustRowsHeights est FAUX, les hauteurs de lignes ne sont pas modifiées.
Il faut avoir à l’esprit que le motif fonctionne comme le décalage des cellules vers le bas dans Excel. Lors de l’ajout d’une « ligne de motif », il n’y a pas d’insertion de nouvelles lignes dans la grille. Et donc, tout ce qui est en dessous du motif sera décalé. Par exemple :
Donnera, après insertion :
On voit bien l’effet du décalage sur les bordures en-dessous.
En conséquence, une grille peut contenir plusieurs motifs avec la restriction qu’un motif en-dessous d’un autre ne peut pas « couper les bords » du motif au-dessus de lui. De même, une cellule fusionnée en-dessous du motif ne peut pas « couper les bords » de celui-ci.
Tris et filtres
Tri
Le tri ne se fait que par une seule colonne. Ce sont les lignes complètes du motif qui sont triées selon cette colonne. Pour trier par une colonne, il faut faire un clic droit via une cellule de cette colonne :
Le libellé des tris est dynamique selon les données : dans l’exemple ci-dessus, il n’y a que des nombre donc « du plus petit au plus grand ». Si la colonne contenait au moins une chaîne on aurait de « A à Z ». Si elle ne contenait que des dates, « du plus ancien au plus récent ».
Remarques :
- Le tri est annulable
- La réponse envoyée par GTAnswer sera elle aussi triée
- Les erreurs (#N/A, …) sont toujours considérées comme supérieure aux autres valeurs
- Les cellules vides sont toujours considérées comme inférieures aux autres valeurs (elles se retrouvent toujours à la fin).
Filtres
Le principe est similaire à celui qui prévaut pour le tri. L’utilisateur doit effectuer un clic droit à l’intérieur du motif sur la colonne qu’il souhaite filtrer :
Le filtrage se fait dynamiquement au fur et à mesure que l’on sélectionne les valeurs. Il ne sera par contre appliqué définitivement que quand l’utilisateur aura cliqué sur le bouton « OK ».
Remarques :
- Le filtrage est annulable
- Activer le filtrage nécessite l’option « Ajuster les hauteurs de ligne ».
- Contrairement au tri, le filtrage est multi-colonnes.
- Le filtre se fait via les valeurs affichées (i.e. en tenant compte du format de nombre), comme dans Excel.
- La réponse envoyée à GtServer ne contient pas d’information de filtre mais si on enregistre le document, le filtrage est bien sauvegardé.
- Le bouton « Effacer » efface le filtre de la colonne en cours. Pour effacer tout le filtrage, il faut utiliser le bouton « Effacer tous les filtres » du menu contextuel.
- Le filtre n’est pas compatible avec les lignes masquées
- Il est possible de rechercher des items à filtrer à l’aide de la boite de saisie située au-dessus de la liste des items. Dans cet exemple, saisir « ar » dans cette boite filtrerait la liste, qui n’afficherait plus que les items « Paris » et « Marseille »
Clé
Une clé de motif est constituée par les éléments suivants :
- Une liste de composants (donnée par des cellules lors de l’import)
- Un message à afficher en cas de doublon.
- Un message à afficher pour les clés invalides (contenant une valeur d’erreur)
Les composants formant la clé ont nécessairement l’option « Obligatoire ». L’import Excel va rajouter cette option aux composants si elle n’est pas déjà présente. La clé est vérifiée :
- à la saisie d’une ligne complète valide
- Lors d’une tentative de transmission des réponses
- Lorsque l’utilisateur clique sur le bouton « Voir les contraintes ».
Les valeurs de la clé sont insensibles à la casse ( 2 libellés identiques avec une casse différente ne sont pas autorisés) . Une clé contenant des erreurs (#N/A…) est considérée comme invalide et s’affichera comme telle dans la liste des contraintes non vérifiées. La construction des formules de messages contenant les valeurs utilise la fonction suivante :
GTCONCATLIST (Separator ; Text1 ; … ; TextN)
Cette fonction concatène les valeurs Text1 à TextN de la même façon que la fonction Excel CONCATENATE en séparant chaque texte avec Separator. Si elle est appelée avec un seul argument, elle renvoie le texte correspondant.
Motif « vide » et contrainte obligatoire sur les composants
L’option « Autoriser une seule ligne vide malgré les contraintes obligatoire » permet de passer outre les contraintes obligatoires ainsi que les clés sur des composants dans le cas suivant :
- Le motif ne contient qu’une seule ligne
- Toutes les cellules éditables (sans tenir compte des verrous) du motif sont vides.
Import Excel dans Answer
Seule la zone correspondant au pattern de base dans la matrice de saisie nécessite des zones nommées. Par contre, GTAnswer a besoin de connaître la dernière ligne. Pour ce faire, il faut nommer une cellule juste en dessous de la dernière ligne du motif comme suit :
La cellule A13 est ici nommée Test.FOOTER. Le footer est automatiquement inscrit lors d’un Export Excel. Ce qui est important, c’est la ligne de fin et pas la cellule.
Depuis la version 2021, l’import Excel utilise les clés pour positionner les valeurs au bon endroit. C’est pourquoi il est impossible d’importer des valeurs dans un motif sans clé définie.
Comportement des formules dans un motif
Soit motif suivant (en Orange les header/footer, en jaune le motif, avec l’option de la grille « Formules » = VRAI, les entêtes de colonnes sont au format texte et rappelles la formule originale dans le motif).
Après insertion de plusieurs lignes (pas nécessairement au début ni à la fin du motif), on obtient :
On remarque la présence d’une ligne vide avant le footer : les formules d’agrégation du footer utilisent cette ligne pour que l’extension se fasse correctement comme vu dans le premier paragraphe.
Analyse par colonne :
- Colonne C : on a bien le résultat voulu
- Colonne D : le range de la formule est contenu dans la ligne du motif et on a bien le résultat voulu.
- Colonne E : le range débute en A3 qui ne fait pas partie du motif, on obtient n’importe quoi
- Colonne F : même remarque que la colonne E
- Colonne G : même que F mais avec des références absolues, on a bien le résultat voulu.
Dans tous les cas, les footers sont corrects.
Conclusion :
- Si on a besoin d’un footer (par exemple pour réaliser un total), il faut une ligne vide avant celui-ci et inclure cette ligne dans les formules
- Un range dans un motif qui fait référence à l’intérieur du motif doit :
- Soit faire référence à une partie de la ligne du motif (cas D) en relatif.
- Soit faire référence à la colonne entière (comme dans le footer) en absolu (cas G)
- Un range dans un motif ne contenant pas de cellules du motif doit être absolu (cf. ci-dessous).
Pour comprendre comment l’insertion d’une ligne affecte les formules, il faut connaître les deux étapes de l’insertion d’une ligne :
- Les cellules en dessous de l’insertion sont décalées vers le bas. A ce moment toutes les formules du formulaire qui on besoin d’être ajustées le sont, que les références soient absolues ou relatives. C’est le comportement d’Excel. Ainsi, dans l’exemple ci-dessus, quand on insère pour la première fois une ligne, la cellule B4 se retrouve en B5. La formule du footer de la colonne B est donc transformée de SOMME(B3 :B4) en SOMME(B3 :B5). La formule en F3 qui contient SOMME(B3 ;B4) devient SOMME(B3 :B5). De même la formule en qui contient SOMME(B$3 ;B$4) devient SOMME(B$3 :B$5).
- Dans les nouvelles cellules, on tire (au sens Excel) la formule de la première ligne. C’est ici qu’intervient la différence absolu/relatif.
Exemple : Dans le cas précédents, on tire dans E4 la formule de E3 et donc SOMME(A3 :C3) devient SOMME(A4 :C4). Pour la colonne F, on a vu que l’étape 1 a transformé la formule de F3 en SOMME(B3 :B5). Cette formule est tirée dans F4 qui contient donc SOMME(B4 :B6) ! Pour la colonne G, on a SOMME(B$3 :B$5) qui devient SOMME(B$3 :B$5), les références de ligne étant absolues.
L’exemple ci-dessus donne :
La colonne E semble fonctionner comme on l’attend (A3 :C3 puis A4 :C4). Cependant, si l’on insère une ligne en dessous de la première, on obtient :
En cela, le moteur de calcul de GT reproduit celui d’Excel, qui fournirait exactement le même comportement.{:}{:en}The Pattern is a compartment that allows you to organise the components attached to it like a table:
- It defines the structure of a record
- It can have records added or subtracted.
The pattern is used in forms for which the number of information to be presented and/or entered varies according to the entities, whether this number is centrally defined or whether the entities add or subtract records.
Syntax
The pattern must be declared in the import field of the form matrix with the following syntax:
GTMOTIF (Name ; Base_Pattern ; [Flags ; [GTCLE (Duplicate Key Message ; Invalid Key Message ; Cell1 ; ... ; CellN) ; [Initial_range]])
- Name: the name of the pattern. This name must be unique for the whole form, it cannot be empty and must start with [A-Za-z]. Accented characters are not allowed.
- Base_Pattern: the cell range that will be duplicated. This range can have as many rows as desired
- Flags is a string that contains the pattern options via flags (separated by semicolons):
- « ALL » corresponds to all options being TRUE
- « NONE » corresponds to all options being FALSE
- « A » the recipient can add rows.
- « S » the recipient can delete rows
- « H » boolean indicating whether row heights are preserved (below) and duplicated (inside) (default FALSE)
- « T » the recipient can sort the data (default FALSE)
- « F » the recipient can filter data (FALSE by default)
- « V » the recipient can allow a single empty row despite the mandatory constraints (FALSE by default)
- GTKEY: a range of cells whose concatenated values must be unique for a pattern element. The key is empty by default. In the GTKEY macro, messages can be formulas. The cells must necessarily contain a component.
- Initial_Range: the initial range, which must be a multiple of the Base_Pattern. If the pattern is not populated with data, it will display as many records as the initial range. The initial range can be equal to the base pattern but having at least two rows of initial range allows to define a different border inside the cells. Note that the initial range also defines the minimum number of rows in the response.
Notes :
- The base pattern and the initial range must match (both in size and with respect to the merged cells, other styles are ignored, only those of the base pattern are important).
- The pattern domain (i.e. the cells below it) must not cross any merged cells below it (because of the cell offset).
- If a pattern is below another pattern; the right and left bounds of the latter must be contained within those of the pattern above (due to the cell offset).
- Only the base pattern can contain components and it must contain less than one.
- It is not possible to create the pattern in Design
Example
- The range B3:E3 is the basic pattern.
- The field « Subsidiary » in B3 serves as a key
- Cell E3 contains a formula with GTCONTROL, hence the error #NAME? in Excel. It contains the formula =C3*D3
- note that row 4 has a different height from row 3.
- Line 5, which is empty, is mandatory if you want to aggregate in a footer (here, in green). Here, cell C6 contains the formula =SUM(C3:C5) which will give the sum of column C of the pattern. This row can be hidden if the pattern option « Adjust row heights » is TRUE (it is the case here).
Adding/Removing Records at Runtime
In GTAnswer, an information button « i » displays the pop-up menu for adding/removing pattern lines:
Note that it is not possible to enter data in line 4, as it does not contain any components.
After insertion, the result obtained is as follows:
When inserting a record, the document will:
- Shift the cells downwards, which implies the translation of all the formulas referring to cells located below the insertion (i.e. all the cells that « move »): This is where the row 5 left empty in the Excel template comes in. The formula that was in C6 is now in C7 and is =SUM(C3:C6). For details on formulas in patterns, see the relevant paragraph.
- Copy all components and styles of the basic pattern into the new cells created (cell format, number format, conditional formatting, comment, etc.).
- Extend the formulas of the basic pattern into the new cells (identical to Excel’s « drag formulas »).
- If the pattern has the AdjustRowsHeights property set to TRUE, the row heights below are shifted and the height of the first row of the pattern is copied into the current row. If AdjustRowsHeights is FALSE, the line heights are not changed.
Bear in mind that the pattern works like the downward shift of cells in Excel. When adding a « pattern row », there is no insertion of new rows in the grid. And so, everything below the pattern will be shifted down. For example:
Will give, after insertion :
You can see the effect of the offset on the borders below.
As a result, a grid can contain several patterns with the restriction that a pattern below another cannot « cut the edges » of the pattern above it. Similarly, a merged cell below the pattern cannot « cut off the edges » of the pattern.
Sorting and filters
Sorting
Sorting is only done by a single column. The complete rows of the pattern are sorted by this column. To sort by a column, you must right-click on a cell in that column:
The sorting criteria are dynamic depending on the data: in the example above, there are only numbers, so « from smallest to largest ». If the column contained at least one string we would have « A to Z ». If it contained only dates, « oldest to newest ».
Remarks :
- The sorting can be cancelled.
- The response sent by GTAnswer will also be sorted
- Errors (#N/A, …) are always considered higher than other values
- Empty cells are always considered lower than other values (they are always at the end).
Filters
The principle is similar to that for sorting. The user must right-click within the pattern on the column he wishes to filter:
The filtering is done dynamically as the values are selected. However, it will only be applied definitively when the user has clicked on the « OK » button.
Remarks :
- The filtering can be cancelled
- Activating filtering requires the « Adjust row heights » option.Unlike sorting, filtering is multi-column.
- The filtering is done via the displayed values (i.e. taking into account the number format), as in Excel.
- The response sent to GtServer does not contain any filter information but if the document is saved, the filtering is saved.
- The « Clear » button clears the filter for the current column. To clear all filtering, use the « Clear All Filters » button in the pop-up menu.
- The filter is not compatible with hidden rows
- It is possible to search for items to be filtered using the input box above the list of items. In this example, entering « ar » in this box would filter the list, which would only display the items « Paris » and « Marseille ».
Key
A pattern key consists of the following elements:
- A list of components (given by cells during import)
- A message to be displayed in case of duplication.
- A message to be displayed for invalid keys (containing an error value)
The components forming the key must have the « Mandatory » option. The Excel import will add this option to the components if it is not already present. The key is checked :
- when a complete valid line is entered
- When an attempt is made to transmit the answers
- When the user clicks on the « View constraints » button.
The key values are case sensitive. A key containing errors (#N/A…) is considered invalid and will be displayed as such in the list of unverified constraints. The construction of the message formulas containing the values use the following function:
GTCONCATLIST (Separator; Text1; ...; TextN)
This function concatenates the values Text1 to TextN in the same way as the CONCATENATE Excel function by separating each text with Separator. If called with only one argument, it sends back the corresponding text.
« Empty » pattern and mandatory constraint on components
The option « Allow a single empty row despite mandatory constraints » allows you to override mandatory constraints and keys on components in the following cases:
- The pattern contains only one row
- All editable cells (regardless of locks) of the pattern are empty.
Import Excel in Answer
Only the area corresponding to the basic pattern in the input matrix requires named fields. However, GTAnswer needs to know the last row. To do this, you need to name a cell just below the last row of the pattern as follows:
Cell A13 is here named Test.FOOTER. The footer is automatically entered in an Excel export. What is important is the end row and not the cell.
Since version 2021, the Excel import uses the keys to position the values in the right place. This is why it is impossible to import values into a pattern without a defined key.
Behaviour of formulas in a pattern
Let’s say the following pattern ( the header/footer in orange, the pattern in yellow , with the grid option « Formulas » = TRUE, the column headers are in text format and recall the original formula in the pattern).
After inserting several rows (not necessarily at the beginning or end of the pattern), we obtain :
Note the presence of an empty row before the footer: the footer aggregation formulas use this row so that the extension is done correctly as seen in the first paragraph.
Analysis by column :
- Column C: we have the desired result
- Column D: the range of the formula is contained in the row of the pattern and we have the desired result.
- Column E: the range starts in A3 which is not part of the pattern, so we get anything
- Column F: same as column E
- Column G: same as F but with absolute references, you get the desired result.
In all cases, the footers are correct.
Conclusion:
- If you need a footer (for example to make a total), you need an empty row before it and include this row in the formulas
- A range in a pattern that refers to the inside of the pattern must :
- Either refer to a part of the row of the pattern (case D) relatively.
- Either refer to the whole column (as in the footer) absolutely (case G)
- A range in a pattern that does not contain any pattern cells must be absolute (see below).
To understand how inserting a row affects the formulas, you need to know the two steps of inserting a row:
- The cells below the insertion are shifted downwards. At this point all formulas in the form that need to be adjusted are adjusted, whether the references are absolute or relative. This is what Excel does. So, in the example above, when you first insert a row, cell B4 is changed to B5. The formula in the footer of column B is therefore transformed from SUM(B3:B4) to SUM(B3:B5). The formula in F3 which contains SUM(B3;B4) becomes SUM(B3:B5). Similarly, the formula in which SUM(B$3 ;B$4) is found becomes SUM(B$3 :B$5).
- In the new cells, the formula from the first row is drawn ( according to Excel). This is where the absolute/relative difference comes in.
Example: In the previous case, the formula for E3 is taken from E4, so SUM(A3:C3) becomes SUM(A4:C4). For column F, we have seen that step 1 transformed the formula of F3 into SUM(B3:B5). This formula is taken from F4 which therefore contains SUM(B4:B6)! For column G, we have SUM(B$3 :B$5) which becomes SUM(B$3 :B$5), the row references being absolute.
The above example gives :
Column E seems to work as expected (A3:C3 then A4:C4). However, if you insert a row below the first one, you get :
In this, the GT calculation engine mimics that of Excel, which would provide exactly the same behaviour.{:}