Skip to content

Les formules nommées (Formulas) dans Power Apps Canvas


Présentation générale

Les formules nommées constituent une fonctionnalité permettant de définir des calculs réutilisables au niveau de l’application. Contrairement aux variables qui stockent une valeur à un instant donné, les formules nommées sont recalculées automatiquement chaque fois que leurs dépendances changent, à l’image des formules dans Excel.
Cette fonctionnalité est accessible via l’objet App.Formulas dans le panneau de propriétés de l’application.

Différence fondamentale avec les variables

Caractéristique
Variable (Set)
Formule nommée
Définition
Impérative (action)
Déclarative
Mise à jour
Manuelle via Set()
Automatique
Moment du calcul
À l’exécution de Set()
À chaque changement de dépendance
Emplacement
N’importe où (OnSelect, OnVisible, etc.)
App.Formulas uniquement
Réactivité
Non réactive
Réactive
There are no rows in this table

Exemple comparatif

Avec une variable :
// Dans OnVisible ou OnSelect
Set(varTotalTTC, varTotalHT * 1.20)

// Problème : si varTotalHT change ailleurs, varTotalTTC n'est pas recalculé
Avec une formule nommée :
// Dans App.Formulas
frmTotalTTC = frmTotalHT * 1.20;

// Avantage : frmTotalTTC est recalculé automatiquement dès que frmTotalHT change

Syntaxe et déclaration

Les formules nommées se déclarent dans la propriété App.Formulas accessible en sélectionnant l’objet App dans l’arborescence.

Syntaxe de base

NomFormule = Expression;

Règles syntaxiques

Chaque formule se termine par un point-virgule
Les noms de formules doivent être uniques
Les formules peuvent référencer d’autres formules nommées
L’ordre de déclaration n’a pas d’importance (résolution automatique des dépendances)

Exemple de déclaration multiple

// Formules de configuration
frmTauxTVA = 0.20;
frmSeuilAlerte = 100;
frmDevise = "€";

// Formules calculées
frmTotalHT = Sum(colPanier, Prix * Quantite);
frmMontantTVA = frmTotalHT * frmTauxTVA;
frmTotalTTC = frmTotalHT + frmMontantTVA;

// Formule conditionnelle
frmMessageAlerte = If(
frmTotalTTC > frmSeuilAlerte,
"Montant élevé : validation requise",
""
);

// Formule formatée
frmAffichageTotal = Text(frmTotalTTC, "#,##0.00") & " " & frmDevise;

Types de formules nommées

Formules scalaires

Retournent une valeur unique (texte, nombre, booléen, date).
frmUtilisateurActuel = User().FullName;
frmDateAujourdhui = Today();
frmEstWeekend = Weekday(Today()) in [1, 7];
frmNombreClients = CountRows(colClients);

Formules de table

Retournent une table complète, utile pour centraliser des filtres ou transformations.
frmClientsActifs = Filter(colClients, Statut = "Actif");

frmVentesTriees = Sort(
Filter(colVentes, Annee = Year(Today())),
Montant,
SortOrder.Descending
);

frmTopProduits = FirstN(
Sort(colProduits, NombreVentes, SortOrder.Descending),
10
);

Formules d’enregistrement

Retournent un enregistrement unique.
frmParametresApp = {
Theme: "Clair",
Langue: "fr-FR",
NombreResultatsParPage: 20,
ModeDebug: false
};

frmMeilleurVendeur = First(
Sort(colVendeurs, ChiffreAffaires, SortOrder.Descending)
);

Formules avec tables statiques

Permettent de définir des données de référence.
frmListeStatuts = Table(
{ Code: "BRO", Libelle: "Brouillon", Couleur: RGBA(150,150,150,1) },
{ Code: "ENC", Libelle: "En cours", Couleur: RGBA(0,120,212,1) },
{ Code: "TER", Libelle: "Terminé", Couleur: RGBA(16,124,16,1) },
{ Code: "ANN", Libelle: "Annulé", Couleur: RGBA(168,0,0,1) }
);

frmJoursSemaine = Table(
{ Numero: 1, Nom: "Dimanche", Abrege: "Dim", EstOuvre: false },
{ Numero: 2, Nom: "Lundi", Abrege: "Lun", EstOuvre: true },
{ Numero: 3, Nom: "Mardi", Abrege: "Mar", EstOuvre: true },
{ Numero: 4, Nom: "Mercredi", Abrege: "Mer", EstOuvre: true },
{ Numero: 5, Nom: "Jeudi", Abrege: "Jeu", EstOuvre: true },
{ Numero: 6, Nom: "Vendredi", Abrege: "Ven", EstOuvre: true },
{ Numero: 7, Nom: "Samedi", Abrege: "Sam", EstOuvre: false }
);

Cas d’usage recommandés

Centralisation des calculs métier

// Règles de calcul centralisées
frmTauxRemiseStandard = 0.05;
frmTauxRemisePremium = 0.15;
frmSeuilPremium = 1000;

frmTauxRemiseApplicable = If(
frmTotalHT >= frmSeuilPremium,
frmTauxRemisePremium,
frmTauxRemiseStandard
);

frmMontantRemise = frmTotalHT * frmTauxRemiseApplicable;
frmTotalApresRemise = frmTotalHT - frmMontantRemise;

Filtres réutilisables

// Filtres centralisés utilisables dans plusieurs galeries ou contrôles
frmCommandesEnAttente = Filter(
colCommandes,
Statut = "En attente" And DateCommande >= DateAdd(Today(), -30, TimeUnit.Days)
);

frmProduitsEnRupture = Filter(
colProduits,
Stock <= SeuilAlerte
);

frmTachesUrgentes = Filter(
colTaches,
Priorite = "Haute" And DateEcheance <= DateAdd(Today(), 7, TimeUnit.Days)
);

Données de configuration

frmConfigApp = {
NomApplication: "Gestion des ventes",
Version: "2.1.0",
Environnement: "Production",
UrlApi: "https://api.monentreprise.fr/v2",
DelaiTimeout: 30,
NombreMaxResultats: 500
};

// Utilisation
frmConfigApp.NomApplication
frmConfigApp.UrlApi

Traductions et libellés

frmLangue = "FR";

frmLibelles = If(
frmLangue = "FR",
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.