On peut vous aider ?
Cherchez des réponses ou parcourez les rubriques de notre documentation
Motif
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.