Aller au contenu
Power Platform Hub Parler à un expertUn expert

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, ou Defaults(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 Filter ou le LookUp qui 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.

Parlons de votre besoin

Décrivez ce qui vous fait perdre du temps. Nos experts vous disent quel outil convient.

  1. Vous décrivez votre besoinRéponse sous 48 h ouvrées.
  2. On en parle 40 minutesL’échange est offert.
  3. Vous voyez une maquetteAvant tout engagement.
  4. Votre outil est livréDe 4 à 6 semaines.
Ce qui vous intéresse (plusieurs choix possibles)

Vos informations servent seulement à répondre à votre demande.