Power Apps
Modifier des données avec la fonction Patch
Patch enregistre une modification dans vos données sans passer par un formulaire : valider une facture, changer un statut ou ajuster un stock en un clic.
La fonction Patch de Power Apps enregistre une modification dans vos données sans passer par un formulaire : créer une ligne, changer un statut, mettre à jour un stock. Elle ne touche que les champs indiqués et laisse les autres intacts. Dans une entreprise, c’est elle qui permet les actions en un clic, comme « Valider » sur une facture ou « +1 » sur un article en rayon.
À quoi sert Patch dans une application métier
Prenons une situation type : un service achats reçoit des factures à valider. Avec un formulaire classique, le responsable ouvre chaque fiche, change le statut, enregistre, puis revient à la liste. Avec Patch, il voit la liste et appuie sur Valider à chaque ligne : le statut change, la date et son nom s’enregistrent, et il passe à la suivante. Le traitement d’une pile de factures devient plus simple, et chaque décision laisse une trace.
D’autres usages reviennent souvent :
- Stock : des boutons « -1 » et « +1 » ajustent la quantité d’un article.
- Suivi de projet : un bouton change le statut d’une tâche, ou la fait passer d’une colonne à l’autre d’un tableau de suivi.
- Saisie en plusieurs étapes : chaque écran sauvegarde sa partie, et l’utilisateur reprend là où il s’était arrêté.
- Journal : chaque modification ajoute une ligne dans une table d’historique, sans effort pour l’utilisateur.
Microsoft le rappelle : pour une saisie simple, le contrôle Formulaire, avec ses validations intégrées, reste le chemin le plus facile. Patch prend le relais dans les cas plus complexes, ou quand l’utilisateur n’a rien à saisir.
La syntaxe de base
Patch reçoit trois éléments :
Patch(Source, EnregistrementDeBase, Modifications)
Source: la table ou la liste à modifier.EnregistrementDeBase: la ligne à modifier, ouDefaults(Source)pour en créer une.Modifications: un enregistrement entre accolades avec les colonnes à changer. Vous pouvez en passer plusieurs : les derniers l’emportent.
Les formules de cet article utilisent la virgule et le point décimal. Dans une interface en français, selon la langue ou les réglages régionaux, le séparateur d’arguments devient le point-virgule (;), l’enchaînement de deux formules s’écrit ;; et le nombre décimal prend une virgule (29,99). La référence officielle de la fonction Patch détaille tous les cas.
Créer un enregistrement
Defaults fabrique une ligne vide avec les valeurs par défaut de la table. Cette formule ajoute un client :
Patch(Clients, Defaults(Clients), {Nom: "Dupont", Ville: "Paris"})
Les colonnes non citées reçoivent leur valeur par défaut. Vérifiez les champs obligatoires de la source : en oublier un fait échouer l’écriture. La source indiquée dans Patch et celle de Defaults doivent être les mêmes.
Patch renvoie la ligne créée, avec les valeurs générées par la source, comme l’identifiant. Gardez-la dans une variable pour vous en resservir :
Set(NouvelEnreg, Patch(Clients, Defaults(Clients), {Nom: "Durand"}));
Notify("Client créé sous le numéro " & NouvelEnreg.ID, NotificationType.Success)
Limite à connaître : cette valeur renvoyée ne contient pas les champs des tables liées. Pour lire le nom d’un contact relié, refaites un LookUp.
Modifier un enregistrement existant
La ligne à modifier doit venir de la source : un LookUp, l’élément choisi dans une galerie, ou une variable qui le contient. C’est ainsi que Power Apps sait quelle ligne retrouver.
Patch(Contacts, LookUp(Contacts, ID = 5), {Email: "nouveau@exemple.fr"})
Cette ligne remplace l’adresse du contact 5. Ses autres informations ne bougent pas, ce qui évite les écrasements accidentels.
Plusieurs colonnes à la fois
Ajoutez des paires colonne et valeur, séparées par des virgules. Elles partent en une seule écriture :
Patch(Produits, Gallery1.Selected, {Prix: 29.99, Stock: 150, Disponible: true})
Depuis les contrôles de l’écran
Dans la propriété OnSelect d’un bouton, les valeurs viennent des contrôles voisins. À l’intérieur d’une galerie, qui répète un modèle pour chaque ligne, ThisItem désigne la ligne en cours :
Patch(Produits, ThisItem, {Stock: ThisItem.Stock + 1})
Une zone de saisie classique se lit avec TextInput1.Text (.Value pour les contrôles modernes), et un champ numérique se convertit avec Value(TextInput1.Text). Un bouton bascule se lit avec Toggle1.Value.
Colonnes de choix et de recherche
Le format attendu dépend de la source, et c’est la cause d’erreur la plus fréquente. Sur Dataverse, une colonne de choix prend directement la valeur de la liste, et une colonne de recherche prend une ligne de la table liée :
Patch(
Accounts,
LookUp(Accounts, 'Account Name' = "Contoso"),
{
'Status': 'Status (Accounts)'.Active,
'Primary Contact': LookUp(Contacts, 'Full Name' = "John Smith")
}
)
Sur une liste SharePoint, une colonne de choix attend un enregistrement avec Value, par exemple {Statut: {Value: "Expédiée"}}.
Patch, formulaire ou Update : que choisir
| Outil | Ce qu’il fait | Quand l’utiliser |
|---|---|---|
SubmitForm |
Envoie les champs d’un contrôle Formulaire, avec ses validations | Saisie complète et simple |
Patch |
Modifie les colonnes indiquées, ou crée une ligne | Action en un clic, saisie sur plusieurs écrans, écriture sans saisie |
Update |
Remplace une ligne entière | Rarement : les colonnes non fournies ne sont pas conservées telles quelles |
UpdateIf |
Modifie des colonnes sur toutes les lignes qui respectent une condition | Traitement par lot, avec des limites selon la source |
Collect |
Ajoute une ou plusieurs lignes | Création simple, ou alimentation d’une collection temporaire dans l’application |
Remove, RemoveIf |
Suppriment des lignes | Patch ne supprime jamais rien |
Patch sait aussi fusionner deux enregistrements hors de toute source. Patch({Nom: "Contoso", Tel: "0102030405"}, {Nom: "Contoso", Ville: "Lyon"}) renvoie un enregistrement avec les trois colonnes, sans rien écrire dans vos données.
Gérer les erreurs
Une écriture peut échouer : réseau coupé, droits insuffisants, champ obligatoire vide, ou ligne modifiée entre-temps par quelqu’un d’autre. Sans contrôle, l’utilisateur croit que tout s’est bien passé. Microsoft recommande IfError, qui donne un retour clair dans les deux cas :
IfError(
Patch(Clients, Gallery1.Selected, {Ville: TextInput1.Text}),
Notify("Échec de l'enregistrement : " & FirstError.Message, NotificationType.Error),
Notify("Enregistrement réussi", NotificationType.Success)
)
La fonction Errors reste disponible pour examiner les problèmes d’une source :
If(
IsEmpty(Errors(Clients)),
Notify("Enregistrement réussi", NotificationType.Success),
Notify("Échec de l'enregistrement", NotificationType.Error)
)
Deux messages reviennent souvent. « Network error when using Patch function » indique en général que l’application n’atteint pas la source, ou que l’utilisateur n’a pas les droits. « Conflicts exist with changes on the server » veut dire que la ligne a changé depuis sa lecture : appelez Refresh(Clients) et recommencez.
Enchaîner les écritures et modifier plusieurs lignes
Plusieurs écritures à la suite
Le point-virgule enchaîne deux Patch. Ici, le client est modifié, puis l’action rejoint une table d’historique :
Patch(Clients, Gallery1.Selected, {Nom: "Martin"});
Patch(Historique, Defaults(Historique), {Action: "Modification client", Horodatage: Now()})
Si les deux écritures sont indépendantes, Concurrent les lance en parallèle et réduit l’attente. Microsoft prévient qu’une trop grande quantité d’appels simultanés peut provoquer des limitations de la part de la source :
Concurrent(
Patch(Clients, Gallery1.Selected, {Statut: "Actif"}),
Patch(Historique, Defaults(Historique), {Action: "Activation", Horodatage: Now()})
)
Ces écritures ne forment pas une transaction : si la seconde échoue, la première reste faite. Sur des données sensibles, testez ce cas.
Plusieurs lignes d’un coup
Patch accepte une table de lignes et une table de modifications de même longueur. L’écart de longueur provoque une erreur :
Patch(
IceCream,
Table({ID: 1, Flavor: "Chocolate", Quantity: 150}, {ID: 2, Flavor: "Vanilla", Quantity: 200}),
Table({Quantity: 300}, {Quantity: 400})
)
La forme la plus répandue utilise ForAll. Le mot-clé As évite toute confusion entre les colonnes de deux tables :
ForAll(
Filter(Produits, Categorie = "Électronique") As P,
Patch(Produits, P, {Promotion: true})
)
Chaque ligne déclenche une écriture : gardez cette méthode pour des lots modestes. Si le lot est grand, l’écriture côté serveur par un flux Power Automate est souvent préférable.
Les limites à connaître
- Les colonnes calculées et les colonnes système restent souvent en lecture seule.
- Patch n’est pas soumis à la délégation, puisqu’il écrit au lieu de lire. En revanche, le
Filterou leLookUpqui choisit la ligne peut l’être : relisez comment fonctionne la délégation et ce qu’elle change sur de gros volumes. - Il n’existe pas d’annulation automatique : gardez l’ancienne valeur dans une variable si un retour en arrière doit être possible.
Quand confier ces écritures à un expert
Pour une petite application où une seule personne modifie une ligne à la fois, Patch s’apprend vite et vous n’aurez sans doute pas besoin d’aide. Le sujet change quand plusieurs utilisateurs écrivent en même temps sur les mêmes données, quand une écriture ratée a un effet sur la facturation ou la paie, ou quand vous mettez à jour des centaines de lignes depuis l’écran. Un prestataire vérifie alors le modèle de données, les droits et le traitement des échecs, là où les erreurs restent discrètes. Pour situer ce type de projet, voyez notre page sur la création d’applications métier avec Power Apps.
Questions fréquentes
Peut-on utiliser Patch pour modifier plusieurs enregistrements en même temps ?
Oui, de deux façons : avec une table de lignes et une table de modifications de même longueur, ou avec ForAll qui appelle Patch à chaque ligne. Pour une même modification sur toutes les lignes d’une condition, UpdateIf existe aussi, avec des limites qui dépendent de la source. Surveillez les avertissements de délégation sur la partie qui sélectionne les lignes.
Quelle est la différence entre Patch et Update dans Power Apps ?
Patch modifie seulement les colonnes que vous indiquez. Update remplace toute la ligne. Contrairement à ce qu’on lit parfois, Update ne se limite pas aux collections. Pour une source connectée comme SharePoint ou Dataverse, Patch reste le choix le plus sûr.
Comment récupérer l’identifiant d’un enregistrement créé avec Patch ?
Patch renvoie la ligne créée. Stockez-la avec Set(NouvelEnreg, Patch(Clients, Defaults(Clients), {Nom: "Durand"})), puis lisez NouvelEnreg.ID. Sur Dataverse, utilisez le nom de la colonne d’identifiant de votre table.
Patch fonctionne-t-il avec Excel ?
Oui, avec un classeur Excel connecté et stocké en ligne dans OneDrive ou SharePoint, à condition que les données soient dans un tableau. Excel prend en charge moins de fonctionnalités de requête que Dataverse, et il supporte mal plusieurs utilisateurs simultanés. Pour une application professionnelle, préférez une liste SharePoint ou Dataverse.
Comment annuler une opération Patch déjà exécutée ?
Il n’existe pas de fonction d’annulation. Il faut exécuter un nouveau Patch avec les anciennes valeurs, que vous aurez gardées dans une variable avant la modification. Si l’historique compte vraiment, enregistrez aussi chaque changement dans une table dédiée.
À lire ensuite
- Afficher des données dynamiques avec les galeries Power AppsLa galerie est le contrôle qui affiche vos listes de données dans une application : demandes, contacts, interventions. Comment la créer, la filtrer, la trier et la garder rapide, avec de vraies formules.9 min
- Gérer les collections de données dans Power AppsUne collection garde des données en mémoire le temps d’utiliser l’application : panier de commande, liste de référence, lot de lignes à envoyer. Voici comment la créer, la modifier et l’enregistrer.9 min
- Créer votre première application Canvas en 30 minutesUne application Canvas se dessine comme une diapositive, puis se relie à vos données. Suivez ces cinq étapes pour obtenir une première version utilisable, avec les vraies formules.8 min
- Concevoir des formulaires intuitifs dans Power AppsUn formulaire clair donne des données propres, un formulaire confus donne des ressaisies. Comment choisir les contrôles, organiser les champs et valider les saisies avec de vraies formules.9 min