Responsive Design Partie 4 : Le cas particulier des formulaires đ

AprĂšs avoir structurĂ© lâapplication et rendu les galeries dynamiques, la gestion de la saisie de donnĂ©es constitue la derniĂšre Ă©tape de cette configuration. Ce quatriĂšme tutoriel se concentre sur les formulaires, des Ă©lĂ©ments centraux des applications dâentreprise qui nĂ©cessitent des ajustements spĂ©cifiques pour sâadapter aux diffĂ©rents Ă©crans.
Pour consulter la Partie 3 : Rendre le contenu dynamique et adaptatif đ§©, cliquez ici
- PrĂ©ambule : Lâenjeu de la saisie de donnĂ©es
- Comprendre le fonctionnement des formulaires
- Mise en pratique
- Les points dâattention avec les formulaires
- Conclusion
PrĂ©ambule : Lâenjeu de la saisie de donnĂ©es
Les formulaires (saisie de tickets, crĂ©ation de profils, commandes) sont gĂ©nĂ©ralement les Ă©crans les plus denses dâune application. Sur un Ă©cran dâordinateur (desktop), une disposition de dix champs sur trois ou quatre colonnes est fonctionnelle. Sur un smartphone, cette mĂȘme disposition rend les champs trop Ă©troits et le texte illisible.
Dans Power Apps, deux architectures sont possibles pour la saisie : utiliser le contrĂŽle standard Formulaire de modification (EditForm), ou construire un Formulaire personnalisĂ© (Custom) avec des contrĂŽles individuels et la fonction Patch(). Ces deux approches peuvent ĂȘtre rendues responsives en appliquant des paramĂ©trages distincts.
â Formulaires customs, pourquoi faut-il les Ă©viter ?
Contrairement Ă ce que conseillent une partie des experts Power Platform, âbouderâ les formulaires natifs pour tout reconstruire soi mĂȘme est une fausse bonne idĂ©e ( du moins câest lĂ mon opinion đ ), voici pourquoi :
CrĂ©er des formulaires de toutes piĂšces en assemblant manuellement des conteneurs de mise en page et des contrĂŽles individuels (sauvegardĂ©s via Patch()) permet une personnalisation avancĂ©e du design. Toutefois, cette mĂ©thode nĂ©cessite un temps de dĂ©veloppement nettement supĂ©rieur pour configurer manuellement la validation des champs, les messages dâerreur et la rĂ©initialisation des donnĂ©es ; vous pourriez y consacrer des jours et des jours, que vous seriez encore Ă dĂ©velopper des fonctionnalitĂ©s qui sont embarquĂ©es nativement dans les EditForm.
Gardez en tĂȘte 'âlâesprit low-codeââ, qui consiste Ă exploiter prioritairement les outils natifs de la plateforme pour optimiser lâefficacitĂ© du dĂ©veloppement.
Dâautant que les formulaires natifs restent hautement personnalisables, pour peu que lâon sache comment les maĂźtriserâŠ
Comprendre le fonctionnement des formulaires
Le contrĂŽle EditForm est utilisĂ© pour sa rapiditĂ© de mise en Ćuvre : il se connecte directement Ă la source de donnĂ©es et gĂšre nativement les erreurs de validation, les types de champs et les soumissions via SubmitForm(). Bien quâil paraisse rigide par dĂ©faut car configurĂ© sur une grille stricte, il est tout Ă fait possible de le rendre fluide.
La mĂ©thode pour rendre un formulaire natif adaptatif consiste Ă libĂ©rer les cartes de donnĂ©es (DataCards) de leur contrainte dâalignement par dĂ©faut, afin quâelles se comportent comme des blocs flexibles.
Matrice de positionnement des datacards :
Les datacards sont positionnés dans un formulaire sur une grille X/Y les valeurs en X (0,1,2,3...) indiquent la position sur une ligne, les valeurs en Y (0,1,2,3...) indiquent la position sur une colonne. Cet agencement répond à plusieurs rÚgles:
-
Le Datacard ayant pour coordonnées
0,0sera tout en haut Ă gauche du formulaire -
Le dĂ©bordement est natif : Si un Datacard nâa pas de place pour ĂȘtre affichĂ© sur une ligne, il sâaffichera en dessous des datacards prĂ©cĂ©dents (Et dĂ©calera les lignes suivantes automatiquement)
-
Les Datacards sont empilĂ©s, si une position en X ou en Y nâest pas utilisĂ©e, il nây aura pas dâespace vide entre les datacards. (il est donc vain de donner la mĂȘme valeur de X Ă des datacards situĂ©s sur des positions Y diffĂ©rentes pour les aligner verticalement)
-
Si deux DataCards ont exactement les mĂȘme valeurs en X et Y, leur ordre sera dĂ©terminĂ© en fonction de leur position dans lâarborescence
Voici un schéma qui récapitule le comportement du positionnement des DataCards dans un formulaire :

đĄNotez quâun DataCard masquĂ© nâoccupera jamais dâespace vide !
â ïž Dans le volet propriĂ©tĂ©s, on trouve les paramĂštres X et Y, attention, ce ne sont pas les mĂȘme paramĂštres, dans un cas se sont des coordonnĂ©es, dans lâautre des pixels
Lâalignement sur les colonnes (SnapToColumns)
Par dĂ©faut, lâĂ©diteur Power Apps utilise la propriĂ©tĂ© Colonnes (Columns) couplĂ©e Ă lâoption Aligner sur les colonnes (SnapToColumns) pour vous aider Ă gĂ©nĂ©rer trĂšs rapidement une disposition structurĂ©e de votre formulaire. LâintĂ©rĂȘt rĂ©el de ces paramĂštres est de vous faire gagner un temps prĂ©cieux lors de la crĂ©ation initiale pour placer tous vos champs dans une grille rigide.
ConcrÚtement, que se passe-t-il quand vous ajoutez ou déplacez un champ quand ce paramÚtre est activé ? Et bien le formulaire va attribuer automatiquement des coordonnées X et Y au Datacard.
Une fois cette mise en place de nos champs effectuĂ©e, ce comportement va vite devenir une contrainte car destinĂ© Ă gĂ©nĂ©rer un formulaire purement statique. Câest pourquoi, aprĂšs avoir ajoutĂ© tous nos champs, nous allons dĂ©libĂ©rĂ©ment dĂ©sactiver cette option pour reprendre le contrĂŽle total et de rendre lâagencement des cartes de donnĂ©es (DataCards) pleinement dynamique. Pour ce faire :

-
Sélectionnez votre contrÎle Formulaire.
-
Dans le panneau de propriĂ©tĂ©s, dĂ©sactivez lâoption Aligner sur les colonnes (SnapToColumns) en la passant sur
false.
Cette action supprime la grille rigide du formulaire, nous laissant toute la latitude pour personnaliser la disposition des champs.

â ïž Attention, rĂ©activer cette option rĂ©initialisera toutes les coordonnĂ©es X,Y de vos Datacards
Comportement des dimensions dâun Datacard
Le comportement des propriétés hauteur et largeur (Width / Height) des Datacards est particulier.
Hauteur (Height)
La hauteur est flexible, spĂ©cifier la hauteur dâun Datacard ne sert quâĂ dĂ©terminer une hauteur minimale. La hauteur sâadaptera automatiquement pour pouvoir afficher lâobjet visible le plus bas. Dans lâexemple ci-dessous, notre DataCard a une hauteur de 130, qui devrait se situer au niveau de la ligne mauve. Toute fois, le rectangle a une hauteur plus importante, le DataCard sâadapte en hauteur pour pouvoir lâafficher.

đĄ Comme nous lâavons vu dans les rĂšgles de position, la hauteur de la ligne sâadaptera Ă la hauteur du DataCard la plus Ă©levĂ©e. Dans cet exemple, la taille et la position du rectangle va augmenter la hauteur de toute la ligne. Notez Ă©galement que les objets flexibles sont identifiables grĂące au âAâ associĂ© au cadre de sĂ©lection.
Câest un aspect trĂšs important Ă prendre en considĂ©ration pour la construction des formulaires : Pour optimiser lâespace, essayez de regrouper sur les mĂȘmes lignes les Datacards les plus grands en hauteur ( Texte enrichi, imageâŠ).
Largeur (Width)
La largeur dâun DataCard se comporte diffĂ©rement de la hauteur. Tout dâabord, elle ne sâadapte pas, si un objet âsortâ du cadre car trop grand, il sera masquĂ© :

Comportement en cas de changement de taille du formulaire
Par dĂ©faut la largeur dâun DataCard est donc fixe ! Mais un paramĂštre va jouer un rĂŽle crucial pour nous permettre de rendre nos formulaires responsive : âLâajustement Ă la largeur (WidthFit)â. sâil est activĂ©, ce paramĂštre permet Ă un DataCard dâoccuper toute la largeur disponible dans le formulaire. Si plusieurs DataCard dâune mĂȘme ligne on ce paramĂštre activĂ©, ils se partageront lâespace disponible.
Voici un schéma qui récapitule le comportement des DataCards en largeur et en hauteur:

Une fois que nous avons pris en compte toutes ces rĂšgles, nous avons toutes les clefs en main pour comprendre comment va se comporter un formulaire si sa largeur Ă©volue dâun pĂ©riphĂ©rique Ă un autre ou quand lâutilisateur change lâorientation de lâĂ©cran. Le schĂ©ma ci-aprĂšs nous montre comment la disposition des Datacards va sâadapter au nouveau format :

Nous pouvez déjà remarquer deux choses :
- Nous devrons ĂȘtre particuliĂšrement vigilant Ă la largeur des DataCards
-
Trop petite, le contenu du Datacard peut ĂȘtre masquĂ© car il nây aura pas suffisamment de place pour afficher les informations qui seront tronquĂ©es.
-
Trop grande, le contenu peut Ă©galement ne pas sâafficher car dĂ©bordant du formulaire !
-
- La disposition change automatiquement pour réordonner le contenu en largeur, ce qui agrandit proportionnellement le formulaire en hauteur !
-
Câest gĂ©nĂ©ralement peu impactant sur un changement dâorientation, car en position âportraitâ lâutilisateur est habituĂ© Ă âscrollerâ
-
Cela peut ĂȘtre plus problĂ©matique si lâapparition de barre de dĂ©filement verticales apparaissent sur de faibles rĂ©solutions, car cela peut ĂȘtre plus fastidieux sur un Ă©cran PC.
-
Mise en pratique
Maintenant que nous connaissons les rĂšgles du jeu, passons Ă la pratique !
Prérequis
Nous allons gĂ©nĂ©rer rapidement un Ă©cran contenant un formulaire, connectĂ© Ă une source de donnĂ©es, une table contenant beaucoup de colonnes afin dâexplorer plusieurs techniques.

Depuis lâarobrescence, gĂ©nĂ©rons un Ă©cran dâaprĂšs le Template âEn-tĂȘte et formulaireâ :


Ajoutons ensuite une source de donnĂ©es bien fournie en nombre de champs : La table Dataverse âutilisateursâ
Cela passera lâapplication en Premium đ, mais peu importe que vous ayez une licence ou non, lâintĂ©rĂȘt ici est purement pĂ©dagogique et aucune licence nâest nĂ©cessaire pour dĂ©velopper une appli premium.
Si vous nâavez pas accĂšs aux tables dataverse ou prĂ©fĂ©rez garder lâappli en licence Standardđ§, vous pouvez utiliser nâimporte quelle liste SharePoint Ă la place, tant quâelle a plus de 10 champs.

Pour afficher des donnĂ©es, nous mettrons le formulaire en mode âmodifierâ (FormMode.Edit) et nous placerons dans la propriĂ©tĂ© Items du formulaire la formule suivante :
LookUp(Utilisateurs;'ID d''objet Azure AD' = User().EntraObjectId)
Vous devriez maintenant avoir un formulaire dâune colonne avec votre nom affichĂ©


â ïž Par sĂ©curitĂ©, supprimez le bouton âEnvoyerâ, nous ne voulons pas modifier les donnĂ©es de votre profil utilisateur dans Dataverse par accident.

Pour lâinstant câest inutilisable en lâĂ©tat, les Datacards ont une largeur fixe de 1300 pixels, si vous switchez de form factor, vous les verrez tronquĂ©s. Nous allons commencer par dĂ©sactiver lâalignement sur les colonnes.
MĂ©thode Express âĄđđ
Jâai une mĂ©thode pour rendre un formulaire rĂ©actif en seulement quelques clics : SĂ©lectionnez tous les DataCards du formulaire (astuce : SĂ©lectionnez le formulaire dans le Canvas et faites Ctrl+A)

Changez la largeur de tous les DataCards à 300, cela nous garantit que les contrÎles ne seront pas tronqués sur un smartphone en mode portrait.
Changez également la largeur minimale du formulaire pour 300 pixels

Mettez la coordonné Y à 0 pour tous les Datacards

Activez lâajustement Ă la largeur pour tous les Datacards
Et voila ! Votre formulaire est rĂ©actif avec la technique du Reflow, quelle que soit la rĂ©solution ou lâorientation, tous les champs seront toujours visibles et le nombre de colonnes sâadaptera Ă la largeur disponible.


Il ne reste plus quâĂ dĂ©terminer lâordre des DataCards en modifiant leur rang en X ou en les dĂ©plaçant sur le Canvas:

MĂ©thodes avancĂ©es â©đïžđŻ
Voici quelques mĂ©thodes pour vous aider dans la conception de votre formulaire en mode rĂ©actif. Nous partirons de notre mise en forme âExpressâ pour lâoptimiser avec ces techniques.

PrĂ©paration : Pour ne pas ĂȘtre gĂ©nĂ© par les DataCards durant la personnalisation, nous allons les âremiserâ tout au fond de notre formulaire en mettant leur coordonnĂ©es Ă 30,30. CelĂ nous permettra de mettre en forme notre formulaire par le haut, ce qui facilitera la conception.
Occuper toute la largeur
Nous allons crĂ©er deux sĂ©parateurs, leur rĂŽle : organiser notre formulaire en catĂ©gories de champs. Ils devront occuper toute la largeur du formulaire, quelle que soit la rĂ©solution. Cette technique peut Ă©galement sâappliquer Ă tout Datacard pour lequel vous souhaitez quâil occupe toute la largeur du formulaire (un champ de saisie de texte enrichi par exemple).

Ajoutons deux DataCards personnalisĂ©es depuis le volet âChampsâ du formulaire:

Quand un DataCard est ajouté, il apparaßt toujours à la suite des autres. Nous retrouverons donc nos deux cartes en position 31,30 et 32,30. Nous allons ensuite :
-
Leur attribuer une hauteur de
28px et une largeur de300px -
Activer âAjuster Ă la Largeur (WidthFit)â
-
Changer leur position X,Y en
0,0et0,5pour les ramener en haut du formulaire
đ Important : Nos cartes de Titre de section devront toujours ĂȘtre seules sur leur position en Y.

Ajoutons y des labels (Cliquez ici pour afficher le code Ă copier et coller dans les cartes)
- txt_civilite:
Control: ModernText@1.0.0
Properties:
Color: =Color.White
Fill: =App.Theme.Colors.Lighter20
FontWeight: =FontWeight.Semibold
Height: =28
Text: ="Civilité"
Width: =Parent.Width
- txt_coordon:
Control: ModernText@1.0.0
Properties:
Color: =Color.White
Fill: =App.Theme.Colors.Lighter20
FontWeight: =FontWeight.Semibold
Height: =28
Text: ="Coordonnées"
Width: =Parent.Width
Il ne nous reste plus quâĂ âRangerâ les DataCards des champs correspondant Ă ces catĂ©gories dans les âespacesâ que nous avons laissĂ© en Y : de 1 Ă 4 pour la civilitĂ©, et Ă partir de 6 pour les coordonnĂ©es.

đŠConseil : Gardez toujours des lignes vides au cas oĂč vous auriez Ă ajouter des champs par la suite, cela vous Ă©pargnera de dĂ©caler tous les cartes des lignes suivantes.
Forcer lâaffichage de champs sur une mĂȘme ligne
Parfois nous avons besoin que certains champs soient toujours affichĂ©s sur une mĂȘme ligne quelle que soit la rĂ©solution.
Prenons 4 champs Oui/Non dans notre formulaire
-
Mettons les sur la ligne
Y=10 -
Profitons-en pour ajouter une carte custom avec un titre de section âParamĂštresâ comme vu avec la technique prĂ©cĂ©dente, en position
Y=9 -
DĂ©sactivons lâajustement Ă la largeur (WidthFit)
-
Mettons une largeur (Width) calculée aux quatre cartes :
Parent.Width/4 // divisier par le nombre de colonnes souhaitées
Quel que soit le format, les 4 cartes se partageront toute la ligne. Mais le problĂšme, câest que nos cartes deviennent illisibles sur un mobile en mode portrait :

AmĂ©liorons donc la formule pour la largeur des DataCards en leur donnant une largeur minimale pour quâelles restent lisibles en toutes circonstances:
Max(
Parent.Width/4; // divisier par le nombre de colonnes souhaitées
200 // La largeur minimale du DataCard pour la lisibilité
)

Explications : Sur grand écran, les cartes occuperont toute la ligne, sauf si la taille des cartes devient critique (<200 pixels), dans ce cas elles seront renvoyées à la ligne.
Il ne nous reste plus quâĂ rĂ©activer lâajustement Ă la largeur (WidthFit) pour que les cartes occupent tout lâespace disponible si elles ont Ă©tĂ© âwrappĂ©esâ
RecrĂ©er un attribut âFillPortionsâ
Dans la partie 2, avec les containers, quand nous activions la largeur flexible dâun objet, nous pouvions dĂ©terminer âle nombre de portionsâ que le contrĂŽle allait occuper dans le remplissage automatique. Et bien nous pouvons reproduire ce comportement avec les Datacards en amĂ©liorant la formule vue dans le point prĂ©cĂ©dent :
-
Prenons deux Datcards pour lesquels nous nâavons pas encore personnalisĂ© la disposition
-
Mettons les sur la mĂȘme ligne
Y=14 -
Pour la largeur du premier mettez la formule :
Max(
Parent.Width * 1/3; // Portions occupées
200 // La largeur minimale du DataCard pour la lisibilité
)
- Pour la largeur du 2eme (le plus grand) mettez la formule :
Max(
Parent.Width * 2/3; // Portions occupées
400 // La largeur minimale du DataCard pour la lisibilité
)
Le premier Datacard occupera 1/3 de la ligne, le second 2/3. Si lâĂ©cran ne permet pas dâafficher les deux champs sur la mĂȘme ligne, le second sera dĂ©calĂ© en dessous, alors les deux cartes occuperont toute la largeur du formulaire car elles ont WidthFit=true.


Les points dâattention avec les formulaires
Lâergonomie globale du formulaire doit respecter plusieurs rĂšgles UI/UX pour rester fonctionnelle sur tout support :

Privilégiez la disposition Verticale
Ăvitez la disposition horizontale, elle est inadaptĂ©e aux Ă©crans Ă©troits. Un positionnement au-dessus assure une structure verticale fluide et maximise la largeur de la zone de saisie.
Dimensionnement des cibles tactiles
Les zones interactives doivent ĂȘtre dimensionnĂ©es pour un usage tactile. Fixez la Hauteur (Height) des zones de texte, listes dĂ©roulantes et boutons Ă un minimum de 40px ou 44px (standards dâaccessibilitĂ© mobile).
Gestion du clavier virtuel
Sur mobile, le clavier virtuel occulte prĂšs de la moitiĂ© de lâĂ©cran.
-
Assurez-vous que le conteneur du formulaire autorise le défilement (
LayoutOverflowY = Scroll) et ajoutez un Datacard vide en fin de formulaire qui fait Ă peu prĂšs un tiers de lâĂ©cran (Ou mettez cette hauteur au dernier Datacard du formulaire). Cela permettra, quand lâutilisateur clique sur un champ qui active le clavier, de toujours avoir le champ modifiĂ© affichĂ© sans avoir Ă re-scroller. -
Désactivez la recherche sur les contrÎles de type ComboBox (
IsSearchable = false) lorsque cela nâest pas strictement requis, afin dâĂ©viter lâouverture intempestive du clavier virtuel lors dâun clic. -
Nâutilisez pas des contrĂŽles de saisie pour afficher du texte, sur une sĂ©lection, ils afficheraient le clavier inutilement.
đĄ Aller plus loin avec les formulaires Pour dĂ©couvrir cette technique de configuration en dĂ©tail et maĂźtriser toutes les subtilitĂ©s du contrĂŽle EditForm (modes dâaffichage, fonctions de soumission, personnalisation des cartes), je vous invite Ă consulter la vidĂ©o que jâai rĂ©alisĂ©e sur le sujet : đș Easy Power Platform : Les Formulaires .
Conclusion
LâintĂ©gration dâun formulaire adaptatif marque lâaboutissement de la structuration de base dâune application. Depuis lâapproche Mobile-First, en passant par lâutilisation des Layout Containers, jusquâĂ la dynamisation des galeries et des cartes de donnĂ©es, lâensemble des mĂ©canismes structurels du Responsive Design a Ă©tĂ© couvert au cours de ces quatre parties.
Cependant, lâoptimisation dâune interface professionnelle ne sâarrĂȘte pas Ă la simple disposition des blocs. Pour garantir une expĂ©rience visuelle homogĂšne et de haut niveau sur tous les appareils, il est nĂ©cessaire de rationaliser le design global.
Dans la Partie 5 de cette sĂ©rie, jâenvisageai dâaborder des techniques qui permettent de compenser le niveau de zoom sur les petits Ă©crans. Mais Microsoft ayant apport des amĂ©lioration sur la taille des contrĂŽles, je vais prendre le temps de vĂ©rifier si ce chapitre est toujours utile. Donc Ă trĂšs bientĂŽt pour une 5eme partie.. ou pas ! đ.




Ăchanger autour de cet article
Les commentaires utilisent Giscus et GitHub Discussions. Le service externe nâest contactĂ© quâaprĂšs activation.